簡體   English   中英

Django:如何為內聯模型formset中的字段設置初始值?

[英]Django: How to set initial values for a field in an inline model formset?

我認為應該是一個簡單的問題。 我有一個內聯模型formset,我想讓一個select字段具有當前登錄用戶的默認選擇值。 在視圖中,我使用的是Django的身份驗證中間件,因此獲取用戶只需訪問request.user

但是,我無法弄清楚的是,如何將該用戶設置為包含用戶列表的選擇框(ModelChoiceField)中的默認選定值。 誰能幫我這個?

我不確定如何在內聯表單集中處理這個問題,但以下方法適用於普通的Forms和ModelForms:

您不能將其設置為模型定義的一部分,但您可以在表單初始化期間設置它:

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)

這樣就可以了。 它的工作原理是設置所有“額外”形式的初始值。

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

我正在使用上面的Rune Kaagaard的想法,除了我注意到formsets提供了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

保存必須測試任何初始表單,只提供額外表單的默認值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM