ForeignKey以酥脆的形式保存数据

问题描述

嗨,我有这两个模型,我有与第一个模型相关的ForeignKey字段。

 class WELLMod(models.Model):
    WellID    = models.CharField(max_length=15,unique=True)
    Perimetre = models.CharField(max_length=50)
    post_date   = models.DateTimeField(default=timezone.Now)
    author      = models.ForeignKey(User,on_delete=models.CASCADE)
    def __str__(self):
        return self.WellID
    def get_absolute_url(self):
        return reverse('WellDt',args=[self.pk])
    class Meta:
        ordering = ('-post_date',)


class DSTMod(models.Model):
    WellID    = models.ForeignKey(WELLMod,to_field='WellID',on_delete=models.CASCADE) 
    TotalDpt      = models.CharField(max_length=15)
    post_date   = models.DateTimeField(default=timezone.Now)
    author      = models.ForeignKey(User,on_delete=models.CASCADE)
    def __str__(self):
        return self.WellID_id
    def get_absolute_url(self):
        return reverse('WellDt',args=[self.WellID_id.pk])
    class Meta:
        ordering = ('-post_date',)

#formes.py

class WELLForm(forms.ModelForm):
    WellID = forms.CharField(label='Well ID',max_length=15)
    Perimetre = forms.ChoiceField(label='Perimetre',max_length=15,required =False)
    class Meta:
        model= WELLMod
        fields=['WellID','Perimetre']

class DSTMForm(forms.ModelForm):
    WellID_id = forms.CharField(label='Well Name',max_length=15)
    TotalDpt  = forms.CharField(label='Total Depth(m)',required =False)
    class Meta:
        model= DSTMod
        fields=['WellID','TotalDpt']

Views.py

class PostCreateWell(LoginrequiredMixin,CreateView): 
    model = WELLMod
    template_name = 'Home/WELLINFO/Add_well.html'
    form_class = WELLForm
    def form_valid(self,form):
        form.instance.author = self.request.user
        return super().form_valid(form)


class PostCreateDST(LoginrequiredMixin,CreateView):
    model = DSTMod
    template_name = 'Home/WELLINFO/WellDST/Add_DST.html'
    form_class = WELLForm
    def form_valid(self,form):
        form.instance.author = self.request.user
        return super().form_valid(form)

url.py

path('Add_well/',views.PostCreateWell.as_view(),name='NEWWELL'),path('Add_Dst/',views.PostCreateDST.as_view(),name='WellDST'),

我的模板是

<form method="POST">
    {% csrf_token %}
      <!-- form  from views.py-->
<div class="border p-2 mb-3 mt-3 border-secondary">
    <h3>Drill stem Test</h3>
    <div class="form-row">
        <div class="form-group col-md-4 mb-0">{{ form.WellID|as_crispy_field }}</div>
        <div class="form-group col-md-4 mb-0">{{ form.TotalDpt|as_crispy_field }}</div>
    </div>
</div>
    <input class="btn btn-success mb-4" type="submit" value="ADD WELL">
</form>

问题是,当我添加一口井时,它会很好地工作,但是当添加DSTMOD时,它不会保存我的数据,并且不会出现错误翻页吗?为什么以及如何解决这个问题? 注意,当我使用管理工具添加数据时,效果很好。

解决方法

通过更改以下内容来解决保存数据的问题:

class DSTMForm(forms.ModelForm):
    WellID_id    = forms.CharField(label='Well Name',max_length=15)
    TotalDpt      = forms.CharField(label='Total Depth(m)',max_length=15,required =False)
    DSTr      = forms.CharField(label='DST Result',widget = forms.Textarea(),required =False)
    class Meta:
        model= DSTMod
        fields=['WellID_id','TotalDpt']



<form method="POST">
        {% csrf_token %}
          <!-- form  from views.py-->
    <div class="border p-2 mb-3 mt-3 border-secondary">
        <h3>Drill Stem Test</h3>
        <div class="form-row">
            <div class="form-group col-md-4 mb-0">{{ form.WellID_id|as_crispy_field }}</div>
            <div class="form-group col-md-4 mb-0">{{ form.TotalDpt|as_crispy_field }}</div>
        </div>
    </div>
        <input class="btn btn-success mb-4" type="submit" value="ADD WELL">
</form>

另一个问题是,当我保存数据时,它会保存除第一个字段以外的所有其他字段

它是空的!我不知道为什么?

enter image description here

,

最后我得到了答案 https://docs.djangoproject.com/en/3.1/topics/forms/modelforms/

我添加了form.ModelChoiceField及其查询集。

class DSTMForm(forms.ModelForm):
    WellID    = forms.ModelChoiceField(label='Well Name',queryset=Wellinfo.objects.all())
    TotalDpt  = forms.CharField(label='Total Depth(m)',required =False)
    class Meta:
        model= DSTMod
        fields=['WellID','TotalDpt']


<form method="POST">
        {% csrf_token %}
          <!-- form  from views.py-->
    <div class="border p-2 mb-3 mt-3 border-secondary">
        <h3>Drill Stem Test</h3>
        <div class="form-row">
            <div class="form-group col-md-4 mb-0">{{ form.WellID|as_crispy_field }}</div>
            <div class="form-group col-md-4 mb-0">{{ form.TotalDpt|as_crispy_field }}</div>
        </div>
    </div>
        <input class="btn btn-success mb-4" type="submit" value="ADD WELL">
</form>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...