如何在 django 中将一个表单字段拆分为模型的多个字段?
Posted
技术标签:
【中文标题】如何在 django 中将一个表单字段拆分为模型的多个字段?【英文标题】:How to split one form fields into multiple fields of a model in django? 【发布时间】:2019-12-08 20:19:30 【问题描述】:这个问题类似于
Using multiple input fields for one model's attribute with django
和
How to render two form fields as one field in Django forms?
我需要的基本上与MultiValueField 相反,我可以将一个表单字段中的数据 - Name 保存到两个模型字段 - Firstname, Lastname。我找不到任何与 MultiValueField 相反的东西。
有人可以建议我什么是更好的方法吗?
【问题讨论】:
【参考方案1】:你为什么不在Form中定义name
字段并重写save方法来保存到模型字段,像这样:
class SomeForm(forms.ModelForm):
name = forms.CharField(max_length=255, required=True)
class Meta:
model = YourModel
fields = ['name', 'and_other_fields']
def save(self, commit=True)
instance = super(SomeForm, self).save(commit=False)
_name = self.cleaned_data.get('first_name').split(' ')
instance.first_name = _name[0]
instance.last_name = ' '.join(_name[1:])
instance.save()
return instance
【讨论】:
意图是在表单上有一个Name
字段,输入的数据应该在模型中拆分并保存为Firstname
和Lastname
。模型中没有Name
字段
对不起,我误解了这个问题。但想法是一样的。我已经更新了我的答案【参考方案2】:
假设,用户将键入用空格分隔的名字和姓氏。你可以用这个:
u_name = YourModelName()
name = request.POST['name'].split(" ") # give attribute name in html and use that name here
first_name = name[0]
last_name = name[1]
u_name.first_name = first_name
u_name.last_name = last_name
u_name.save()
您可以使用任何方法来保存您的数据。只需使用拆分。
【讨论】:
你真的不应该直接使用request.POST
。您应该将它们传递给 Forms 或 ModelForms 以完成所有值的验证和转换。然后,您可以使用 form.cleaned_data
访问这些值。以上是关于如何在 django 中将一个表单字段拆分为模型的多个字段?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Django 管理员中为模型字段使用自定义表单字段?