django 表单已提交,但未在数据库中保存值

svmlkihl  于 2023-03-31  发布在  Go
关注(0)|答案(1)|浏览(136)

当我提交此表单时,而不是保存它所需的值并将其保存到数据库中,它提交了表单,但当我检查管理页面时,值为无,表单提交并将我重定向到主页,但当我检查我的管理员时,表单所需的值为无:
型号:

class Column(models.Model):
     user = models.OneToOneField(User, on_delete= models.CASCADE)
     name = models.CharField(max_length=100)
     select_type = models.ForeignKey(Type, on_delete= models.CASCADE)

视图:

class CreateColumn(CreateView):
    model = Column
    template_name = 'column_create.html'
    form_class = ColumnForm
    success_url = 'home'
    
    def get_context_data(self, **kwargs):
        context = super(CreateColumn, self).get_context_data(**kwargs)
        context['formset'] = ColumnFormSet(queryset=Column.objects.none())
        return context

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

表格:

class ColumnForm(forms.ModelForm):
    class Meta:
        model = Column
        fields = ['name', 'select_type']

ColumnFormSet = modelformset_factory(Column, fields=('name' 'select_type'), extra=30)

模板:

<form method='post'>
    {% csrf_token %}
{{ formset.management_form}}
   {% for form in formset %}
        {{form.as_p}}
   {% endfor %}
<button type='submit'>Save<button/>
<form/>
72qzrwbm

72qzrwbm1#

您的表单没有提交,因为它无效,用户字段是您模型中的必填字段,但您忽略了ColumnForm中的该字段,因此表单不会提交。在解决方案中,我已经使用户字段不需要
form_vaild()方法更新为

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

在您的forms.py

class ColumnForm(forms.ModelForm):
    class Meta:
        model = Column
        fields = ['user', 'name', 'select_type']

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['user'].required = False

相关问题