首先是代码:
class CommentForm(forms.ModelForm):
categories = forms.ModelChoiceField(queryset = Category.objects.all(), required = False)
class CommentAdmin(admin.ModelAdmin):
form = CommentForm
当我正在编辑我的评论时,我希望它类别字段具有我最后一次保存时所选内容的初始值。我该怎么做?
答案 0 :(得分:2)
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
中答案 1 :(得分:1)
您希望在生成的表单中默认选择当前模型值吗?如果是这种情况,我认为您在视图中寻找的是
form = CommentForm(instance = commentinstance)
commentinstance
是您正在编辑的实例。
(如果是POST请求,这将是form = CommentForm(request.POST, instance = commentinstance)
)
修改强>:
如果您想在表单中执行此操作,则只需提供instance
的{{1}}参数,如下所示:
__init__
如果您确实提供了一个默认def __init__(self, *args, **kwargs):
instance = kwargs.pop('instance', YOUR_DEFAULT_INSTANCE)
super(CommentForm, self).__init__(instance = instance, *args, **kwargs)
,那么它甚至会保留默认instance
。
答案 2 :(得分:0)
我想有几种方法可以解决这个问题。
以前我是这样做的:
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
重要的是将填充的模型对象放入关键字变量实例。