如何在两个不同的模型中插入数据?

时间:2017-01-18 05:06:09

标签: python django django-models

我是编码的新手,我正在尝试我的第一个Django应用程序。

这一次我有三个不同的模型,但是当我点击form时,我想要保存单个Save我希望在该表单模型和其他2个模型中保存数据。

所以在我的显示器中,我想循环其他两个模型以显示我的内容。

这甚至可能吗?

models.py

class Personame(models.Model):
    name = models.CharField(max_length=128)
    def __str__(self):
        return self.name

class Personlastname(models.Model):
    last_name = models.CharField(max_length=128)
    def __str__(self):
        return self.last_name


class Personinfo(models.Model):
    personame = models.CharField(max_length=128)
    personlastname = models.CharField(max_length=128)
    address = models.TextField()
    phone_number = models.CharField(max_length=128)
    hobbies =models.CharField(max_length=128)

    def __str__(self):
        return self.personame

forms.py:

class personform(forms.ModelForm):
    personame = forms.CharField(label = "Name")
    personlastname = forms.CharField(label = "Last Name")
    class Meta:
        model = Personinfo
        fields = ["personame","personlastname","address","phone_number","hobbies"]

views.py:

def index(request):
    queryset = Personame.objects.all()
    queryset2 = Personlastname.objects.all()
    qs = chain(queryset,queryset2)
    form = personform(request.POST or None)
    context = {
    "qs": qs,
    "form":form,
    }
    if form.is_valid():
        instance = form.save()
    return render(request, "index.html", context)

的index.html:

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

            <table >
             <tr>
                <th>Name</th>
                <th>Last Name</th>

            </tr>
            {% for item in qs  %}
            <tr> 
                <td>{{ item.name }}</td>
                <td>{{ item.last_name }}</td> 
            </tr>
            {% endfor %}
            </table>

基本上我想在namePersoninfo中保存Personame,我想在last_namePersoninfo中保存Personlastname。因此,我可以在模板中显示PersonamePersonlastname

有人可以帮我吗?

我很乐意为您提供帮助...... 谢谢

2 个答案:

答案 0 :(得分:2)

你的模特根本没有任何意义。他们真的应该是一个模特。你还没有定义任何模型之间的任何关系。为此,您必须添加OneToOneField或ForeignKey。这实际上意味着您为每个数据项都有一个额外的列。完全是多余的。

class Personinfo(models.Model):
    name = models.CharField(max_length=128)
    last_name = models.CharField(max_length=128)
    address = models.TextField()
    phone_number = models.CharField(max_length=128)
    hobbies =models.CharField(max_length=128)

    def __str__(self):
        return self.personame

这使得您的生活变得更加简单,编码更简单。

答案 1 :(得分:0)

你的模型没有类Meta,需要在类meta中定义表名,如:

class Meta: 
   managed = True
   db_table = 'tableName'

然后你需要在 personform

中覆盖保存功能