嗨,我有这两个模型,我有与第一个模型相关的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']
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)
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时,它不会保存我的数据,并且不会出现错误地翻页吗?为什么以及如何解决这个问题? 注意,当我使用管理工具添加数据时,效果很好。
答案 0 :(得分:0)
通过更改以下内容来解决保存数据的问题:
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>
另一个问题是,当我保存数据时,它会保存除第一个字段以外的所有其他字段
它是空的!我不知道为什么?
答案 1 :(得分:0)
最后我得到了答案 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)',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>