【发布时间】:2013-12-15 16:34:39
【问题描述】:
试图更改管理员ModelForm 中的字段顺序。
贝娄是我的尝试,但顺序保持不变。添加的字段oi_number 和vat_number 在末尾呈现,除了它们在self.fields SortedDict 字典中的末尾not。
class ContactAdminForm(forms.ModelForm):
oi_number = fields_for_model(OrganizationExtra)['oi_number']
vat_number = fields_for_model(OrganizationExtra)['vat_number']
# fields = ('organization', 'oi_number', 'vat_number')
# ^^^ this won't affect fields order either
class Meta:
model = Organization
def __init__(self, *args, **kwargs):
super(ContactAdminForm, self).__init__(*args, **kwargs)
try:
org_ix = self.fields.keyOrder.index('organization')
self.fields.keyOrder.insert(org_ix+1, self.fields.keyOrder[-2])
self.fields.keyOrder.insert(org_ix+2, self.fields.keyOrder[-1])
del self.fields.keyOrder[-2:]
except ValueError:
pass
在调用__init__ 方法之前得到解析的字段顺序吗?如何更改他们的订单?
更新:
上面的ModelForm 被用作管理模型中的一个表单,它定义了自己的字段,所以如果我把所有字段定义都放在上面的表单中,我会得到FieldError 关于未知字段名的异常:
class ContactAdminForm(forms.ModelForm):
...
class Meta:
model = Organization
fields = ('organization', 'oi_number', 'vat_number')
class ContactOptionsEx(ContactOptions):
form = ContactAdminForm
admin.site.register(Contact, ContactOptionsEx)
# at attempt to render the form:
# FieldError at /admin/contact/contact/3/
# Unknown field(s) (organization) specified for Organization
但是名为organization 的字段确实存在,并且在ContactAdminForm.__init__ 方法中可用。
【问题讨论】:
-
你把
fields = ...放在Meta下面了吗?这应该工作...... -
@sk1p 如果我确实将字段放在
Meta类中,那么我会收到FieldError异常。有关详细信息,请参阅问题更新。 -
@yuvi 我相信链接的可能重复项不能完全回答问题。
-
看到您的更新,这对您有帮助吗? stackoverflow.com/questions/350799/…
-
@yuvi 不幸的是没有。表单的
__init__方法中的任何顺序更改均无效。仅在Meta类中设置。
标签: python django django-forms satchmo