Я хочу использовать модель внешнего ключа в качестве форм в Django forms
у меня есть две модели в django фермер и трактор, и я хочу использовать обе модели в одной форме на веб-странице, чтобы со всеми свойствами в качестве входных данных, такими как имя, телефон, email, id, цена и т.д.
.
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=False)
farmer = models.ForeignKey(
Farmer, on_delete=models.SET_NULL, null=True, related_name="posts")
forms.py
from .models import Post,Farmer
class TractorForm(ModelForm):
class Meta:
model = (Post,Farmer)
fields = ("tractor_price","implimentaion","purchase_date","tractor_company","tractor_model","description")
Здесь я также хочу использовать модель Farmer, чтобы я мог принимать входные данные из нее также с ее полями
forms.py
from .models import Post,Farmer
class PostForm(ModelForm):
class Meta:
model = Post
fields = ["tractor_price","implimentaion","purchase_date","tractor_company","tractor_model","description"]
class FarmerForm(PostForm):
#declare the field from the Farmer model here.
first_name = forms.CharField(max_length=100)
last_name = forms.CharField(max_length=100)
phone =forms.CharField(max_length=10)
address = forms.CharField(widget=forms.Textarea)
email_address = forms.EmailField()
class Meta(PostForm.Meta):
fields = ['first_name','last_name','phone','address','email_address'] + PostForm.Meta.fields
теперь внутри вашего views.py вы можете просто вызвать FarmerForm.
.
B) Другой вариант
.
forms.py
from .models import Post,Farmer
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']
внутри вашего views.py теперь вы должны вызвать эти две формы.
from .forms import FarmerForm,PostForm
def add_post(request):
submitted = False
if(request.method == "POST"):
form1 = FarmerForm(request.POST)
form2 = PostForm(request.POST)
if form1.is_valid() and form2.is_valid():
form1.save()
form2.save()
return HttpResponseRedirect("/add_post?submitted=True")
else:
form1 = FarmerForm()
form2 = PostForm()
if("submitted" in request.GET):
submitted = True
return render(request,"tractor/form.html",{"form1":form1,"form2":form2, "submitted": submitted})
Теперь внутри вашего шаблона (form.html) вы можете сделать что-то вроде этого.
<form method="POST" action="{% url 'tractor:add_post' %}">
{% csrf_token %}
{{ form1.as_p }}
{{ form2.as_p }}
<button type='submit'> send data </button>
</form>