Django-UpdateView不保存到数据库

Django-UpdateView不保存到数据库,django,post,django-models,django-forms,Django,Post,Django Models,Django Forms,单击“提交”按钮后,“我的更新视图”不会保存到本地数据库 视图.py class BHA_UpdateView(UpdateView): template_name = 'bha_test.html' context_object_name = 'bha' model = BHA_overall success_url = reverse_lazy('well_list') pk_url_kwarg = 'pk_alt' form_class =

单击“提交”按钮后,“我的更新视图”不会保存到本地数据库

视图.py

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

    def get_object(self, queryset=None):
        pk = self.kwargs.get(self.pk_url_kwarg)
        api = get_well_api(self.request)
        current_bha = BHA_List.objects.filter(well=api, id=pk)[0]
        return current_bha
class BHA_overall_Form(forms.ModelForm):
    class Meta():
        model = BHA_overall
        fields = '__all__'
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)
forms.py

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

    def get_object(self, queryset=None):
        pk = self.kwargs.get(self.pk_url_kwarg)
        api = get_well_api(self.request)
        current_bha = BHA_List.objects.filter(well=api, id=pk)[0]
        return current_bha
class BHA_overall_Form(forms.ModelForm):
    class Meta():
        model = BHA_overall
        fields = '__all__'
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)
型号.py

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

    def get_object(self, queryset=None):
        pk = self.kwargs.get(self.pk_url_kwarg)
        api = get_well_api(self.request)
        current_bha = BHA_List.objects.filter(well=api, id=pk)[0]
        return current_bha
class BHA_overall_Form(forms.ModelForm):
    class Meta():
        model = BHA_overall
        fields = '__all__'
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>
理想情况下,
pk\u url\u kwarg='pk\u alt'
应该在
BHA\u列表
中查找对象,并导航到一个页面,在该页面中可以更新
BHA\u列表
中特定对象的信息。您可以更新的字段包括
BHA_total
中的字段

看起来是这样的:

re_path(r'^bha/(?P<pk_alt>[-\w]+)$', base_views.BHA_UpdateView.as_view(), name='bha')
You can now edit [ BHA 2 ]: # url = .../bha/2

    BHA Overall Information - 
    Drill_str_name: []
    Depth_in: []
    ...

    Other Child Model - 
    other_field: []
    other_field: []

我需要
pk\u url\u kwarg='pk\u alt'
来查询
BHA\u列表
实例以生成唯一的
url
,我需要
BHA\u总体表单
来显示用户可以编辑的输入字段,并将用户输入保存到数据库中。那么我应该在这里使用什么其他CBV呢?

您的
get\u对象
方法返回
BHA\u列表
对象。但是,您的视图和表单的模型是
BHA_-overall
。因此
get_object
还应返回要更新的
BHA_total
实例:

def get_object(self, queryset=None):
    pk = self.kwargs.get(self.pk_url_kwarg)
    api = get_well_api(self.request)
    bha_number = BHA_List.objects.filter(well=api, id=pk)[0]
    current_bha = BHA_overall.objects.filter(bha_number=bha_number)[0]
    return current_bha

我看到了错误的根源。但这给了我另一个麻烦。我需要
pk\u url\u kwarg
来查找
BHA\u列表中的项目
model实例。这就是为什么我必须重写
get\u object()
。如果我不重写
get\u object()
pk\u url\u kwarg
将在
BHA\u-total
模型实例中搜索项目,这不是我想要的。那么我如何解决这个问题呢?@EricKim您需要通过
BHA_列表
对象获取
BHA_整体
?在这种情况下,您可以使用两个查询:
bha\u number=bha\u List.objects.filter(well=api,id=pk)[0]
current\u bha=bha\u total.objects.filter(bha\u number=bha\u number)[0]
。不,这不是我需要的。唯一的问题是
pk_url_kwarg
应该查找
BHA_列表
,而所有其他东西都需要获得
BHA_整体
对象。如果不是为了
pk\u url\u kwarg
,我就不需要重写
get\u object()
。有没有办法欺骗Django只改变
pk\u url\u kwarg
的行为?@EricKim看起来你误解了
UpdateView
的工作原理。它是通过一些kwargs获取特定对象并更新它
UpdateView
不应获取一个对象并更新另一个对象。@不客气。我想您最好使用内联表单集。检查此处的示例: