gpt4 book ai didi

python - 如何指定 Django 表单中字段的顺序?

转载 作者:行者123 更新时间:2023-12-05 01:37:14 25 4
gpt4 key购买 nike

我们正在使用 Django 2.2,我想升级到 Django 3.0。我们有一个 mixin(写于 2017 年),可以向表单添加字段:

class LocalizedFirstLastNameMixin(object):
def __init__(self, *args, **kwargs):
self.language_code = kwargs.pop('language_code', 'en')
super().__init__(*args, **kwargs)
for loc_field in reversed(self.get_localized_fields()):
self.fields[loc_field] = User._meta.get_field(loc_field).formfield()
self.fields[loc_field].required = True
self.fields.move_to_end(loc_field, last=False)
self.initial[loc_field] = getattr(self.instance, loc_field, '')

self.get_localized_fields() 返回英语的 ('first_name_en', 'last_name_en')(按此顺序),或与我们当前语言相同的本地化版本使用。

此 mixin 用作继承自 ModelForm 的表单的基类之一:

class RegistrationForm(AddAttributesToFieldsMixin, CleanEmailMixin, CleanNewPasswordMixin, CleanDateOfBirthMixin, LocalizedFirstLastNameMixin, forms.ModelForm):
....

class ProfileForm(AddAttributesToFieldsMixin, CleanDateOfBirthMixin, LocalizedFirstLastNameMixin, forms.ModelForm):
....

它适用于 Django 版本高达 2.2。但是当我升级到 3.0 时,我收到了这个错误信息:

AttributeError: 'dict' 对象没有属性 'move_to_end'

这个函数的信息:

将现有元素移至末尾(如果 last==False 则移至开头)。

它属于OrderedDict

所以我想我们希望这些字段位于表单字段的开头。

Django 3.0 中表单中字段的实现有变化吗?如何指定字段的顺序?如果我更改它,它是否适用于以前的版本,例如 Django 2.2?

我检查了 Django 3.0 release notes并且还从 3.0.1 发布到 3.0.5,但我没有找到有关此问题的任何文档。

更新:我发现我可以调用 self.order_fields(...),但我如何定义来自模型的字段?我只想在字段列表的开头添加两个附加字段。

最佳答案

我在 Django developers mailing list 中询问过我被告知不要自己操纵字段的顺序,而是使用记录在案的受支持的 API 方法 here .所以我更改了代码并改用了 self.order_fields:

class LocalizedFirstLastNameMixin(object):
def __init__(self, *args, **kwargs):
self.language_code = kwargs.pop('language_code', 'en')
super().__init__(*args, **kwargs)
localized_fields = self.get_localized_fields()
for loc_field in localized_fields:
self.fields[loc_field] = User._meta.get_field(loc_field).formfield()
self.fields[loc_field].required = True
self.initial[loc_field] = getattr(self.instance, loc_field, '')
self.order_fields(field_order=localized_fields)

请注意,我只对前两个字段进行排序。所有其他字段都保持默认顺序。我现在也不必以相反的顺序添加字段。

关于python - 如何指定 Django 表单中字段的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61140458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com