Django-强制表单保存到特定模型

Django-强制表单保存到特定模型,django,django-models,django-forms,django-views,django-class-based-views,Django,Django Models,Django Forms,Django Views,Django Class Based Views,视图.py class BHA_UpdateView(UpdateView): model = BHA_List pk_url_kwarg = 'pk_alt' form_class = BHA_overall_Form class BHA_overall_Form(forms.ModelForm): class Meta(): model = BHA_overall fields = '__all__' class BHA_L

视图.py

class BHA_UpdateView(UpdateView):
    model = BHA_List
    pk_url_kwarg = 'pk_alt'
    form_class = BHA_overall_Form
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)
    depth_out = models.CharField(max_length=111)
forms.py

class BHA_UpdateView(UpdateView):
    model = BHA_List
    pk_url_kwarg = 'pk_alt'
    form_class = BHA_overall_Form
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)
    depth_out = models.CharField(max_length=111)
型号.py

class BHA_UpdateView(UpdateView):
    model = BHA_List
    pk_url_kwarg = 'pk_alt'
    form_class = BHA_overall_Form
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)
    depth_out = models.CharField(max_length=111)
如果我在模板中使用
{{form.as_p}}
向用户显示表单字段,它将生成如下页面:

def post():
    bha_overall_instance1.bha_number = userinput.bha_number
    bha_overall_instance1.drill_str_name = userinput.drill_str_name
    bha_overall_instance1.depth_in = userinput.depth_in

如何重写
get()
post()
方法以从用户获取输入,保存用户输入,并更新特定的模型实例

对于我当前的
视图.py
,来自
表单的用户输入将不会保存到DB,因为我的
表单
指的是
模型=BHA_总体
,其中作为
视图.py的模型
模型=BHA_列表
。但由于某些原因,我不想在
views.py
中更改模型

如果我将我的
CBV
更改为
CreateView
而不是
UpdateView
,它将创建一个新的
BHA_total
实例到DB,而不会出现任何问题。但是如果我想更新
bhau-total
的特定模型实例,我首先需要
get()
一个
bhau-total
的模型实例,并通过
post()
更新模型实例。但我不知道怎么做。我该怎么做

编辑:

大概是这样的:

def post():
    bha_overall_instance1.bha_number = userinput.bha_number
    bha_overall_instance1.drill_str_name = userinput.drill_str_name
    bha_overall_instance1.depth_in = userinput.depth_in
你也可以使用just

from django.views import View
和您的views.py:

from django.views import View
from django.models import Model1, Model2
class UpdateView(View):
      model = Model1
      template_name = 'update.html'

      def post(self, request, id, name , "other-parameters", ..., *kwargs):
          obj1 = self.model1.objects.get_or_404(id=id) # this just example you can past any parameters that you want
          if obj1:
             obj1.name = name # updating name of obj1
             obj1.save() # savin updated object
          obj2 = Model2.objects.get_or_404(id=request.POST.get('id') # you must to pass name='some-id' in your template at input tag
          if obj2:
             obj2.some_field = some_parameter
             obj2.save()
          return redirect('index/') # you must choose only url that exists 
我等待你的反馈