我在这里遇到问题,希望你能帮助我。
这就是我所拥有的:
Models.py
class Personinfo(models.Model):
name = models.CharField(max_length=128)
def __str__(self):
return self.name
class Personage(models.Model):
AGES = (
('0', '0'),
('1', '1'),
('2', '2'),
)
age = models.CharField(max_length=128,choices=AGES, default=True)
def __str__(self):
return self.age
class Person(models.Model):
person = models.ForeignKey(Personinfo, null=True)
personage = models.ForeignKey(Personage, null=True)
address = models.TextField()
phone_number = models.CharField(max_length=128)
hobbies =models.CharField(max_length=128)
def __str__(self):
return self.address
Views.py
def index(request):
qs = Person.objects.all()
form = personform(request.POST or None)
form2 = personinfoform(request.POST or None)
form3 = personageform(request.POST or None)
context = {
"qs": qs,
"form2":form2,
"form":form,
"form3":form3,
}
form2_valid = form2.is_valid()
form_valid = form.is_valid()
form3_valid = form3.is_valid()
if form2_valid and form_valid and form3_valid:
a = form2.save()
b= form.save(commit=False)
b.person = a
b.save()
c = form3.save(commit=False)
c.personage = a
c.save()
return render(request, "index.html", context)
forms.py
class personinfoform(forms.ModelForm):
name = forms.CharField(label= 'Nombre')
class Meta:
model = Personinfo
fields = ["name"]
class personform(forms.ModelForm):
address = forms.CharField(label='Direccion')
phone_number = forms.CharField(label='Telefono')
hobbies = forms.CharField(label='Hobbies')
class Meta:
model = Person
exclude = ('person','personage',)
fields = ["address","phone_number","hobbies"]
class personageform(forms.ModelForm):
class Meta:
model = Personage
fields =["age"]
的index.html
<form method="POST" action="">{% csrf_token %}
{{form2.as_p}}
{{form3.as_p}}
{{form.as_p}}
<input type="submit" value="Save!" />
</form>
<table >
<tr>
<th>Name</th>
<th>Age</th>
<th>Address</th>
<th>Telefono</th>
<th>Hobbies</th>
</tr>
{% for p in qs %}
<tr>
<td>{{ p.person.name}}</td>
<td>{{ p.personage.age }}</td>
<td>{{ p.address }}</td>
<td>{{ p.phone_number }}</td>
<td>{{ p.hobbies }}</td>
</tr>
{% endfor %}
</table>
正如您所看到的,我有3个表单,并且正确保存,但它未在我的模板中显示为person.name
,我正在尝试{{1}我试图将其完全设为personage.age
,但它不起作用。怎么了?
基本上我希望Personinfo
像Personage
一样精确地工作。
谢谢..!
答案 0 :(得分:1)
我不确定为什么你的模型如此复杂,外键在这种情况下看起来不太有用,所以我假设你向我们展示了你的代码的简化版本。
我认为问题出在你的保存代码中。订单不正确。您的主模型应该最后保存,以便它包含外键。你应该首先保存form2和form3,最后形成。 我建议你使用显式变量名而不是a,b,c,它会使错误更加明显。 此外,我认为你的人物形式缺乏适合年龄的领域。
答案 1 :(得分:1)
您的表单保存顺序不正确,正确的顺序应为:
if form2_valid and form_valid and form3_valid:
age = form3.save()
info = form2.save()
person = form.save(commit=False)
person.personage = age
person.person = info
person.save()
在模板中,您应该使用:
<td>{{ p.personage.get_age_display }}</td>