Django-UpdateView表单不保存

Django-UpdateView表单不保存,django,django-models,django-forms,django-views,Django,Django Models,Django Forms,Django Views,单击Submit按钮时,我在CBV中使用表单的代码(UpdateView)不会保存到数据库。我不知道怎么了 视图.py class BHA_UpdateView(UpdateView): template_name = 'bha_test.html' context_object_name = 'bha' model = BHA_List success_url = reverse_lazy('well_list') pk_url_kwarg = 'pk_

单击
Submit
按钮时,我在
CBV
中使用表单的代码(
UpdateView
)不会保存到数据库。我不知道怎么了

视图.py

class BHA_UpdateView(UpdateView):
    template_name = 'bha_test.html'
    context_object_name = 'bha'
    model = BHA_List
    success_url = reverse_lazy('well_list')
    pk_url_kwarg = 'pk_alt'
    form_class = BHA_overall_Form

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        api = get_well_api(self.request)
        context['single_well_bha_list'] = BHA_List.objects.filter(well=api)
        return context

    def form_valid(self, form):
        self.object = form.save()
        return super().form_valid(form)
class WellInfo(models.Model):
    api = models.CharField(max_length=100, primary_key=True)
    well_name = models.CharField(max_length=100)
    status = models.CharField(max_length=100)

class BHA_List(models.Model):
    well = models.ForeignKey(WellInfo, 'CASCADE', related_name='bha_list')
    bha_number = models.CharField(max_length=100)

class BHA_overall(models.Model):
    bha_number = models.ForeignKey(BHA_List, 'CASCADE', related_name='bha_overall')
    drill_str_name = models.CharField(max_length=111)
    depth_in = models.CharField(max_length=111)
from django import forms
from contextual.models import BHA_overall

class BHA_overall_Form(forms.ModelForm):
    class Meta():
        model = BHA_overall
        fields = '__all__'
型号.py

class BHA_UpdateView(UpdateView):
    template_name = 'bha_test.html'
    context_object_name = 'bha'
    model = BHA_List
    success_url = reverse_lazy('well_list')
    pk_url_kwarg = 'pk_alt'
    form_class = BHA_overall_Form

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        api = get_well_api(self.request)
        context['single_well_bha_list'] = BHA_List.objects.filter(well=api)
        return context

    def form_valid(self, form):
        self.object = form.save()
        return super().form_valid(form)
class WellInfo(models.Model):
    api = models.CharField(max_length=100, primary_key=True)
    well_name = models.CharField(max_length=100)
    status = models.CharField(max_length=100)

class BHA_List(models.Model):
    well = models.ForeignKey(WellInfo, 'CASCADE', related_name='bha_list')
    bha_number = models.CharField(max_length=100)

class BHA_overall(models.Model):
    bha_number = models.ForeignKey(BHA_List, 'CASCADE', related_name='bha_overall')
    drill_str_name = models.CharField(max_length=111)
    depth_in = models.CharField(max_length=111)
from django import forms
from contextual.models import BHA_overall

class BHA_overall_Form(forms.ModelForm):
    class Meta():
        model = BHA_overall
        fields = '__all__'
bha_test.html

<form method="POST">
  {% csrf_token %}
  {{ form.as_p }}
  <input type="submit" class='btn btn-primary' value="Submit">
</form>

因此有一个
model=BHA_List
,还有另一个表单通过外键与模型相关。表单字段将显示给用户,单击submit按钮后,它应该将用户输入保存到DB,但不会。怎么了?

您的ModelForm模型与UpdateView模型不匹配

您正在使用以下内容声明您的模型表单:

model = BHA_Overall
您的UpdateView有:

model = BHA_List
请记住,UpdateViews使用model=执行queryset,以便将模型实例分配给ModelForm,因为它们是不同的模型,所以很可能不匹配

此外,如果您没有执行额外的验证或修改ModelForm.instance,则不需要覆盖UpdateView中的form\u valid方法