[英]ModelChoiceField initial value in change form
首先是代码:
class CommentForm(forms.ModelForm):
categories = forms.ModelChoiceField(queryset = Category.objects.all(), required = False)
class CommentAdmin(admin.ModelAdmin):
form = CommentForm
当我正在编辑我的评论时,我希望它的类别字段具有我最后一次保存时所选内容的初始值。 我怎么做?
def get_form(self, *args, **kwargs):
f = super(CommentAdmin, self).get_form(*args, **kwargs)
f.base_fields['categories'].initial = 1
return f
放在CommentAdmin中的这段代码就是诀窍......
编辑:
def __init__(self, *args, **kwargs):
super(CommentForm, self).__init__(*args, **kwargs)
self.fields['categories'].initial = self.instance.object_id
或者将此代码放在CommentForm中
您希望在生成的表单中默认选择当前模型值吗? 如果是这种情况,我认为您在视图中寻找的是
form = CommentForm(instance = commentinstance)
其中commentinstance
是您正在编辑的实例。
(如果是POST请求form = CommentForm(request.POST, instance = commentinstance)
这将是form = CommentForm(request.POST, instance = commentinstance)
)
编辑 :
如果你想在表单中这样做,你可以只提供__init__
的instance
参数,如下所示:
def __init__(self, *args, **kwargs):
instance = kwargs.pop('instance', YOUR_DEFAULT_INSTANCE)
super(CommentForm, self).__init__(instance = instance, *args, **kwargs)
如果您从视图中提供一个,则甚至会保留默认instance
。
我想有几种方法可以解决这个问题。
以下是我之前的做法:
class MyForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
if 'ref' in kwargs:
ref = kwargs['ref']
item = MyModel.objects.get(pk=ref)
kwargs['instance'] = item
super(MyForm, self).__init__(*args, **kwargs)
class Meta:
model = MyModel
重要的是将填充的模型对象放入关键字变量实例中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.