【问题标题】:ForeignKey save data with form crispyForeignKey 以脆的形式保存数据
【发布时间】:2021-01-07 16:28:49
【问题描述】:

您好,我有这两个模型,并且我有与第一个模型相关的 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)',max_length=15,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 时它不会保存我的数据并没有错误地转到同一页面?为什么以及如何解决这个问题? 注意,当我使用管理工具添加数据时,效果很好。

【问题讨论】:

  • 我在 forms.py class Meta: model= DSTMod fields=['WellID_id','TotalDpt'] 在模板 {{ form.WellID_id|as_crispy_field }} 中进行了更改,它保存数据但不是 WellID_id,它是空的???

标签: django-models django-forms django-views foreign-keys django-crispy-forms


【解决方案1】:

保存数据的解决方案是通过改变这些来完成的:

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>

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

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

【讨论】:

    【解决方案2】:

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

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

    class DSTMForm(forms.ModelForm):
        WellID    = forms.ModelChoiceField(label='Well Name',queryset=Wellinfo.objects.all())
        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','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>
    

    【讨论】:

      猜你喜欢
      • 2017-10-11
      • 2020-02-13
      • 1970-01-01
      • 2017-02-19
      • 2014-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-26
      相关资源
      最近更新 更多