【问题标题】:Using modelForm with CreateView使用带有 CreateView 的 modelForm
【发布时间】:2021-05-02 15:14:00
【问题描述】:

我对 CreateView 有疑问。我的代码有点像科学怪人,代码来自各种教程、文档和 stackoverflow。我觉得我误解了工作流程中的一些基本步骤。

这里是models.py:

class Customer(models.Model):
    name = models.CharField(max_length=200, null=False, blank=False)
    phone = models.CharField(max_length=50, null=False, blank=True)
    created_by = models.ForeignKey(User, on_delete=models.CASCADE, 
                                   related_name='customers')

这是forms.py:

class CustomerForm(forms.ModelForm):

    def clean(self):
        super().clean()
        name = form.cleaned_data['name'].upper()
        form.cleaned_data['name'] = name

    class Meta:
        model = Customer

        fields = ['name', 'phone']
        widgets = {
            'name': forms.TextInput(attrs={"class": "form-control"}),
            'phone': forms.TextInput(attrs={"class": "form-control"}),}

这里是views.py:

class CustomerCreateView(LoginRequiredMixin, CreateView):
    model = Customer
    form_class = CustomerForm
    context_object_name = 'customer_create'
    template_name = 'customers/customer-create.html'
    login_url = 'account_login'

    def form_valid(self, form):
        form.instance.created_by = self.request.user
        return super().form_valid(form)

最后是模板:

<form method="post">
  {% csrf_token %}

  {{ form.as_p }}
  <input type="submit" value="Save">
</form>

问题是当我点击保存时页面只是刷新并且没有创建新对象。 我做错了什么?

更新: 将 form_valid 方法更改为此解决了问题:

    def form_valid(self, form):
        form.instance = form.save(commit=False)
        form.instance.created_by = self.request.user
        form.instance.save()
        return super().form_valid(form)

【问题讨论】:

    标签: django django-views django-forms


    【解决方案1】:

    在 forms.py 中 字段= ['姓名','电话'] 应该替换为 字段=('姓名','电话')

    【讨论】:

    • 那没有解决它=(
    猜你喜欢
    • 2019-05-06
    • 1970-01-01
    • 2011-08-12
    • 2019-08-22
    • 2018-07-23
    • 2014-08-19
    • 2019-02-10
    • 1970-01-01
    • 2011-10-16
    相关资源
    最近更新 更多