django - Django单模型多表单
问题描述
我有一个表说'push_message'将推送消息发送到多种设备类型,即STB、Andriod、Feature phone。我为此创建了一个模型。但是对于不同的设备类型,不同的字段是必需的。有什么办法可以使用不同形式的相同模型(假设 STB 和 Android)
class PushNotification(models.Model):
id = models.AutoField(primary_key=True)
sched_at = models.DateTimeField(default=timezone.now)
message = models.TextField(max_length=500)
alert_ty = models.CharField(max_length=64, choices=Options.alert_type())
title = models.CharField(max_length=127)
device_ty = models.CharField(max_length=24, choices=Options.get_devices())
根据设备类型,少数字段可能是必填项。所以我想根据用户选择的设备制作表格。
请提供您的意见,我如何在 Django 2.1 中实现这一点。
提前致谢。
解决方案
模型严格表示 django 中的数据库。因此,“可选”需要一些字段是行不通的。我建议在数据库中将它们创建为“不需要”,然后在表单中将它们定义为需要(必需 = True):
class SomeCustomForm(DefaultForm):
form_field = forms.BooleanField( label='Very important field'),
required=True,
error_messages={'required':'Can`t proceed without this'})
如果您想要一个包含设备列表的下拉列表并根据它验证表单,您可能希望根据文档使用自定义clean() ( https://docs.djangoproject.com/en/2.2/ref/forms/validation/ ):
表单子类的 clean() 方法可以执行需要访问多个表单字段的验证。您可以在此处进行检查,例如“如果提供了字段 A,则字段 B 必须包含有效的电子邮件地址”。如果它愿意,这个方法可以返回一个完全不同的字典,它将用作cleaned_data。
from django import forms
class ContactForm(forms.Form):
def clean(self):
cleaned_data = super().clean()
cc_myself = cleaned_data.get("cc_myself")
subject = cleaned_data.get("subject")
if cc_myself and subject:
# Only do something if both fields are valid so far.
if "help" not in subject:
raise forms.ValidationError(
"Did not send for 'help' in the subject despite "
"CC'ing yourself."
)
推荐阅读
- python - 如何将数字转换为熊猫列中的类别
- ios - UIScrollView 缩放到图像的特定区域
- python - pandas dataframe-如何查找在每一行中重复的单词
- android - MediaStore 在查询 DISPLAY_NAME 时返回 null
- postgresql - CodeBuild 到 RDS 的连接问题
- html - 视口元设置为设备宽度和初始比例的奇怪行为
- firebase - Flutter & Stream:getter 'name' 被调用为 null
- python - 处理函数时检测到错误
70_SetVals:, E121: Undefined variable: g:pydiction_location -- 按下选项卡按钮时发生错误 - html - 使网格元素占据整个网格
- powershell - 如何在输出 csv 中添加空行?