pdx*_*ile 6 django django-templates django-models django-forms
我需要重新排序来自另一个基类的模型中的字段.无法找到解决方案.下面代码段中的"地址"始终显示在HTML模板的开头.如何使用渲染模板进一步向下移动?提前致谢.
class Address:
street= ...
city= ...
class Customer(Address):
name = ...
...
class CustomerForm(ModelForm):
def __init__(...)
super(CustomerForm, self).__init__(*args, **kw)
self.fields.keyOrder=[
'name',
'Address', #<-- I want "Address" appear after the name in my template
#<-- This obviously is not the right code.
class Meta:
model = Customer
Run Code Online (Sandbox Code Playgroud)
-P
重新订购非常繁琐:
# django's SortedDict stores ordering of its fields in this list-type attribute:
keyorder = self.fields.keyOrder
# Remove fields which we want to displace:
keyorder.remove('street')
keyorder.remove('city')
# Get position where we want them to put in:
i = keyorder.index('name') + 1
# Insert items back into the list:
keyorder[i:i] = ['city', 'street']
Run Code Online (Sandbox Code Playgroud)
可能更好的方法是再次以正确的顺序列出所有字段:
class MyForm(ModelForm):
class Meta:
model=Customer
fields=[..., 'name', 'street', 'city', ...]
Run Code Online (Sandbox Code Playgroud)
小智 7
在Django 1.9中,他们向Form类添加新参数现在您可以通过定义field_order来更改顺序 ,例如添加两个字段来使用应用程序表单:
class SignupFormExtra(SignupForm):
"""
A form to demonstrate how to add extra fields to the signup form, in this
case adding the first and last name.
"""
first_name = forms.CharField(label=_(u'First name'),
max_length=30,
required=False)
last_name = forms.CharField(label=_(u'Last name'),
max_length=30,
required=False)
field_order=['first_name','last_name']
Run Code Online (Sandbox Code Playgroud)
您可以将它用于任何继承类Form的表单.
默认情况下,Form.field_order = None,它保留您在表单类中定义字段的顺序.如果field_order是字段名称列表,则按列表指定的顺序排序字段,并根据默认顺序追加其余字段.
小智 5
from django import forms
class CustomForm(forms.Form):
ORDER = ('field1', 'field2', 'field3')
def __init__(self, *args, **kwargs):
super(CustomForm, self).__init__(*args, **kwargs)
fields = OrderedDict()
for key in self.ORDER:
fields[key] = self.fields.pop(key)
self.fields = fields
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4302 次 |
| 最近记录: |