![](/img/trans.png)
[英]How do I set initial values for extra fields on a Django Model 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.