Django - 没有在模板中正确显示我的一个表格

时间:2017-01-19 01:45:49

标签: python django

我在这里遇到问题,希望你能帮助我。

这就是我所拥有的:

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,但它不起作用。怎么了?

基本上我希望PersoninfoPersonage一样精确地工作。

谢谢..!

2 个答案:

答案 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>