【问题标题】:Django - UpdateView form does not saveDjango - UpdateView 表单不保存
【发布时间】:2018-07-24 00:49:28
【问题描述】:

单击Submit 按钮时,我在CBV(UpdateView) 中使用表单的代码不会保存到数据库。我看不出有什么问题。

views.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)

models.py

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)

bha_test.html

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

forms.py

from django import forms
from contextual.models import BHA_overall

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

所以有一个model = BHA_List,还有另一种形式是通过外键与模型相关的。表单字段将显示给用户,单击提交按钮后,它应该将用户输入保存到 DB,但它没有。怎么了?

【问题讨论】:

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


    【解决方案1】:

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

    您正在声明您的 ModelForm:

    model = BHA_Overall
    

    您的 UpdateView 有:

    model = BHA_List
    

    请记住,UpdateView 使用 model= 执行查询集,因此它们可以将模型实例分配给 ModelForm,很可能不匹配,因为它们是不同的模型。

    此外,如果您没有进行额外的验证或修改 ModelForm.instance,则无需覆盖 UpdateView 中的 form_valid 方法。

    【讨论】:

      猜你喜欢
      • 2014-02-01
      • 2021-09-22
      • 1970-01-01
      • 2017-01-02
      • 2019-06-21
      • 1970-01-01
      • 2021-12-15
      • 2018-02-01
      • 2016-02-28
      相关资源
      最近更新 更多