Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-在一个视图中提交多个表单_Python_Django - Fatal编程技术网

Python Django-在一个视图中提交多个表单

Python Django-在一个视图中提交多个表单,python,django,Python,Django,我的视图中有两个窗体,当我点击save时,它不能正常工作;当我想在模板上显示我保存的内容时,它没有按预期显示 以下是我所拥有的: 视图.py def index(request): queryset = Personinfo.objects.all() queryset2 = Person.objects.all() qs = chain(queryset,queryset2) form = personform(request.POST or None)

我的视图中有两个窗体,当我点击save时,它不能正常工作;当我想在模板上显示我保存的内容时,它没有按预期显示

以下是我所拥有的:

视图.py

def index(request):
    queryset = Personinfo.objects.all()
    queryset2 = Person.objects.all()
    qs = chain(queryset,queryset2)
    form = personform(request.POST or None)
    form2 = personinfoform(request.POST or None)
    context = {
    "queryset": queryset,
    "queryset2": queryset2,
    "qs": qs,
    "form2":form2,
    "form":form,
    }
    form2_valid = form2.is_valid()
    form_valid = form.is_valid()
    if form2_valid and form_valid:
        a = form2.save()
        b= form.save(commit=False)
        b.ForeignkeytoA = a
        b.save()
    return render(request, "index.html", context)
class Personinfo(models.Model):
    name = models.CharField(max_length=128)

    def __str__(self):
        return self.name





class Person(models.Model):
    person = models.ForeignKey(Personinfo)
    address = models.TextField()
    phone_number = models.CharField(max_length=128)
    hobbies =models.CharField(max_length=128)

    def __str__(self):
        return self.person
index.html

<form method="POST" action="">{% csrf_token %}
{{form2.as_p}}
{{form.as_p}}
<input type="submit" value="Save!" />
</form>

            <table >
             <tr>
            <th>Name</th>
            <th>Address</th>
            <th>Number</th>
            <th>Hobbies</th>

            </tr>
            {% for item in qs  %}
            <tr> 
                <td>{{ item.name }}</td> #form2
                <td>{{ item.address }}</td> #form1
                <td>{{ item.phone_number }}</td> #form1
                <td>{{ item.address }}</td> #form1
            </tr>
            {% endfor %}
            </table>
我的输出:

正如您所看到的,我的表没有按预期显示我的项目。
是否有可能在同一行中显示每个项目?

存在两个错误。如果我理解正确,您希望来自
Person
实例的数据和来自其附带的
PersonInfo
实例的数据打印在同一行上。然而,您正试图通过使用来实现这一点,这不是基于它们的关系来连接查询集,而是盲目地连接它们

因此,如果
Person.objects.all()
返回一个包含以下数据的查询集

id  person   address   phone_number    hobbies   
1      1         a         a             a
2      2         5         5             5
PersonInfo.objects.all()
返回一个包含

id   Name 
1    aaa      
2    aa       
chain
将它们组合为

id  person  name   address   phone_number    hobbies
1           aaa
2           aa
1      1             a           a             a
2      2             5           5             5
相反,您应该利用模型之间的关系。如果只将
Person
queryset作为上下文传递给模板,则可以编写

{% for p in persons %}
    <tr>
        <td>{{ p.person.name }}</td>
        <td>{{ p.address }}</td>
        <td>{{ p.phone_number }}</td>
        <td>{{ p.hobbies }}</td>
    </tr>
{% endfor %}

{{p.person.name}
不为我工作,我试着只传递
person
正如你所建议的,除了
name
Try
{p.person.id}
之外,一切都正常,看看它是否打印了一个id。
b.ForeignkeytoA=a
是用你的代码写的吗?这将在python对象
b
下设置一个名为
ForeignkeytoA
的新变量,而不是将
person
外键设置为对象
a
。它应该是
b.person=a
。那么
ForeignkeytoA
呢?你的意思是
b.save()下的
b.person=a
# ...
b = form.save(commit = False)
b.person = a
b.save()
# ...