В форме Django не все поля заполнены для ввода данных
Я хотел использовать обе модели фермер (внешний ключ для трактора) и трактор в одной форме, но я не получаю поля трактора на веб-странице для ввода его значения, я получаю только поля фермера.
my models.py
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)
implimentaion = 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 Только функция 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(request.POST)
post_form = Post(request.POST)
args = {}
args.update(csrf(request))
args["farmer_form"] = farmer_form
args["tractor_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","implimentaion","purchase_date","tractor_company","tractor_model","description")
class FarmerForm(ModelForm):
class Meta:
model = Farmer
fields = ('first_name','last_name','phone','address','email_address')
я также добавил изображение формы, которое также форма правильно выровнена, как вы можете видеть на снимке экрана, и я не получаю поля трактора формы, только получаю ввод формы фермера.
Скриншот веб-страницы, которую я получаю
Я думаю, что вы сделали это: args["tractor_form"]=post_form
, но вы забыли использовать {{tractor_form}}
в вашем html-файле.
Измените args["tractor_form"]=post_form
на args["post_form"]=post_form
ИЛИ
Измените {{post_form}}
в html-файле на {{tractor_form}}
EDIT
Вам не нужно делать так: farmer_form = FarmerForm(request.POST)
в вашем else
блоке.
farmer_form = FarmerForm(request.POST) # before
farmer_form = FarmerForm() # after.
EDIT2
Вы не должны помещать {{post_form}}
, {{farmer_form}}
и {% csrf_token %}
внутри <>
тега формы:
<div class="form-group">
<form
method="POST"
style="margin-left: 40px; margin-right: 100px"
enctype="multipart/form-data"
action="{% url 'tractor:add_post' %}"
> <- this is where the form <> is finished.
{% csrf_token %}
{{post_form}}
{{farmer_form}}
<input type="submit" class="btn btn-dark" value="Submit" />
</form>
</div>