【问题标题】:How to split one form fields into multiple fields of a model in django?如何在 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 相反的东西。

有人可以建议我什么是更好的方法吗?

【问题讨论】:

    标签: django django-models django-forms django-templates django-views


    【解决方案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字段,输入的数据应该在模型中拆分并保存为FirstnameLastname。模型中没有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 访问这些值。
    猜你喜欢
    • 2023-04-03
    • 2021-12-15
    • 2012-03-09
    • 2020-11-23
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多