我正在寻找一种django方法来处理一些具有大量业务逻辑的复杂表单。问题是我的很多表格都有依赖关系
一些例子:
1.两个相互依赖的“选择”(选择)字段。例如,考虑两个下拉菜单,一个用于国家,一个用于城市
2.“required-if”规则,即如果选择了表单中的其他内容,则需要设置字段。假设用户在选择字段中选择“其他”选项,他需要在textarea中添加解释
3.处理日期/日期时间字段的一些方法,即最大/最小日期等规则?
我现在正在做的是以clean()
,__init__()
的形式实现所有这些,并编写一些(繁琐的)客户端JS。
我想知道是否有更好的方法?比如在类似于django Meta
类的东西中定义这些规则。
答案 0 :(得分:0)
1.这项任务与形式的html建筑有关,不涉及django / jinga。 在这里,你去动态表格。现在最好和最常用的方法是通过JS。 3.建立一个带有"时间"输入字段然后通过" admin"看他们如何处理它。这里介绍了所有特殊字段的用法:https://docs.djangoproject.com/en/1.9/ref/forms/fields/
答案 1 :(得分:0)
我要取消这个线程的讨论,因为我还没有一个好的答案。如果您尝试验证一个字段,并且希望该字段的验证依赖于相同格式的另一个字段,请使用clean(self)方法。
这里是一个示例:假设您有两个字段,分别是“ main_image”和“ image_2”。您要确保如果用户上传第二张图片,那么他们也要上传主图片。如果他们没有上传图片,则默认图片将称为“ default_ad.jpg”。
在forms.py中:
class AdForm(forms.ModelForm):
class Meta:
model = Ad
fields = [
'title',
'main_image',
'image_2',
'item_or_model_names',
'category',
'buying_or_selling',
'condition',
'asking_price',
'location',
]
def clean(self):
# "Call the cleaned form"
cleaned_data = super().clean()
main_image = cleaned_data.get("main_image")
image_2 = cleaned_data.get("image_2")
if "default_ad" not in image_2:
# Check to see if image_2's name contains "default_ad"
if "default_ad" in main_image:
raise forms.ValidationError(
"Oops, you didn't upload a main image."
)
如果您想了解更多信息,请阅读:https://docs.djangoproject.com/en/2.2/ref/forms/validation/#cleaning-and-validating-fields-that-depend-on-each-other
祝你好运!