我想用我的两个模型-农民(拖拉机外键)和拖拉机-在一个单一的形式,但我没有得到拖拉机的领域在网页上输入其价值,我只是得到农民的领域
我的模特
class Farmer(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
phone =models.CharField(max_length=10)
address = models.TextField(max_length=200)
email_address = models.EmailField()
def full_name(self):
return f"{self.first_name} {self.last_name}"
def __str__(self):
return self.full_name()
class Post(models.Model):
tractor_price = models.IntegerField(max_length=150)
implementation = models.CharField(max_length=50)
purchase_date = models.DateField(auto_now=False)
slug = models.SlugField(unique=True, db_index=True, null=True,blank=True)
tractor_company = models.CharField(max_length=50)
tractor_model = models.CharField(max_length=50)
description = models.TextField(validators=[MinLengthValidator(10)])
date = models.DateField(auto_now_add =True)
farmer = models.ForeignKey(
Farmer, on_delete=models.SET_NULL, null=True, related_name="posts")
my view.py Only add_post函数
def add_post(request):
if(request.method == "POST"):
farmer_form = FarmerForm(request.POST)
post_form = Post(request.POST)
if(farmer_form.is_valid() and post_form.is_valid()):
farmer = farmer_form.save()
post = post_form.save(False)
post.farmer = farmer
post.save()
return redirect(reverse("tractor.views.posts"))
else:
farmer_form = FarmerForm()
post_form = Post(request.POST)
args = {}
args.update(csrf(request))
args["farmer_form"] = farmer_form
args["post_form"] =post_form
return render(request,"tractor/form.html",args)
forms.html
<div class="form-group">
<form
method="POST"
style="margin-left: 40px; margin-right: 100px"
enctype="multipart/form-data"
action="{% url 'tractor:add_post' %}"
{% csrf_token %}
{{post_form}}
{{farmer_form}}
>
<input type="submit" class="btn btn-dark" value="Submit" />
</form>
</div>
forms.py
class PostForm(ModelForm):
class Meta:
model = Post
fields = ("tractor_price","implementation","purchase_date","tractor_company","tractor_model","description")
class FarmerForm(ModelForm):
class Meta:
model = Farmer
fields = ('first_name','last_name','phone','address','email_address')
我还添加了表单的图像 此外,正如您在屏幕截图中所看到的那样,表单正确对齐,我没有得到表单的字段,只得到了farmer表单的输入
我认为您这样做了:
args["tractor_form"]=post_form
,但您忘记在html文件中使用{{tractor_form}}
将
args["tractor_form"]=post_form
更改为args["post_form"]=post_form
或
将html文件中的
{{post_form}}
更改为{{tractor_form}}
编辑
您不需要这样做:
farmer_form = FarmerForm(request.POST)
在else
块中。EDIT2
您不应该将
{{post_form}}
、{{farmer_form}}
和{% csrf_token %}
放在表单标记的<>
内:相关问题 更多 >
编程相关推荐