有没有更简单的方法在POST参数的视图中创建Django对象..

时间:2016-05-23 11:08:37

标签: django post django-views

如果我在视图中有以下代码......

enquiry = Enquiry(
                  name=request.POST['name'],
                  email=request.POST['email'],
                  enquiry_input=request.POST['enquiry_input'],
                  enquiry_type=request.POST['enquiry_type']
                  )

        enquiry.full_clean()
        enquiry.save()

有没有办法可以同时传递所有参数?我知道你可以在rails中做到这一点。例如Object.create(object_params)是否有Django等价物?仅供参考我尚未在前端创建表单但我只是测试POST请求是否创建了一个查询对象......

2 个答案:

答案 0 :(得分:1)

正确且最简单的方法是使用model forms

class EnquiryForm(ModelForm):
    class Meta:
        model = Enquiry
        fields = ['name', 'email', 'enquiry_input', 'enquiry_type']

您不必将其显示给用户,您只需将其用于validation and saving

def my_view(request):
    form = EnquiryForm(request.POST)
    if form.is_valid():
        form.save()
        return # normally a redirect response here
    else:
        # react to incorrect data
        # you may investigate form.errors
        return # some error response

答案 1 :(得分:0)

您可以使用**使用Python的kwargs扩展来执行此操作:

enquiry = Enquiry(**kwargs)

但不要。由于Rails引入strong_params的原因相同,这是不安全的。改为使用表格。