9

私は単純な問題であるべきだと思うものを持っています。インライン モデル フォームセットがあり、選択フィールドに現在ログインしているユーザーのデフォルトの選択値を設定したいと考えています。このビューでは、Django の Authentication ミドルウェアを使用しているため、ユーザーを取得するには にアクセスするだけrequest.userです。

ただし、ユーザーのリストを含む選択ボックス (ModelChoiceField) でそのユーザーをデフォルトの選択値として設定する方法はわかりませんでした。誰でもこれで私を助けることができますか?

4

3 に答える 3

6

これでうまくいきます。すべての「余分な」フォームの初期値を設定することで機能します。

formset = MyFormset(instance=myinstance)
user = request.user
for form in formset.forms:
    if 'user' not in form.initial:
        form.initial['user'] = user.pk
于 2011-11-22T08:25:00.860 に答える
5

インライン フォームセットでこれを処理する方法はわかりませんが、次のアプローチは通常のフォームとモデル フォームで機能します。

これをモデル定義の一部として設定することはできませんが、フォームの初期化中に設定できます。

def __init__(self, logged_in_user, *args, **kwargs):
    super(self.__class__, self).__init__(*args, **kwargs)
    self.fields['my_user_field'].initial = logged_in_user

...

form = MyForm(request.user)
于 2009-09-30T21:32:18.533 に答える
0

上記の Rune Kaagaard のアイデアを使用していますが、フォームセットが extra_forms プロパティを提供していることに気付きました: django.forms.formsets コード

@property
def extra_forms(self):
    """Return a list of all the extra forms in this formset."""
    return self.forms[self.initial_form_count():]

したがって、上記の例に固​​執します。

formset = MyFormset(instance=myinstance)
user = request.user
for form in formset.extra_forms:
    form.initial['user'] = user.pk

初期フォームをテストする必要がなくなり、追加のフォームにデフォルトを提供するだけです。

于 2015-06-28T13:11:48.943 に答える