外键Django Mod

2024-05-17 10:11:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建3个模型;PersonAddressAnniversy。计划是每人有一个地址和一个周年纪念日。但每个地址和周年纪念日可以有多个人。

到目前为止,我有以下几点,但我认为OneToMany(foreign key)关系可能是错误的。i、 每个地址可以有一个人,但每个人可以有多个地址。

from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=50)
    birthday = models.DateField()

    def __unicode__(self):
        return u'%s' % (self.name)

class Address(models.Model):
    person = models.ForeignKey(Person)
    address = models.CharField(max_length=150)

    def __unicode__(self):
        return u'%s' % (self.address)

class Anniversy(models.Model):
    person = models.ForeignKey(Person)
    anniversy = models.DateField()

    def __unicode__(self):
        return u'%s' % (self.anniversy)

Tags: nameselfmodelreturnaddressmodels地址def
1条回答
网友
1楼 · 发布于 2024-05-17 10:11:21

您可以通过另一种方式创建关系;将外键添加到Person类型以创建多对一关系:

class Person(models.Model):
    name = models.CharField(max_length=50)
    birthday = models.DateField()
    anniversary = models.ForeignKey(
        Anniversary, on_delete=models.CASCADE)
    address = models.ForeignKey(
        Address, on_delete=models.CASCADE)

class Address(models.Model):
    line1 = models.CharField(max_length=150)
    line2 = models.CharField(max_length=150)
    postalcode = models.CharField(max_length=10)
    city = models.CharField(max_length=150)
    country = models.CharField(max_length=150)

class Anniversary(models.Model):
    date = models.DateField()

任何一个人只能连接到一个地址和一个周年纪念,但是地址和周年纪念可以从多个Person条目中引用。

AnniversaryAddress对象也将被赋予反向关系;默认情况下,它将被称为person_set,但如果需要,可以配置其他名称。请参见查询文档中的以下relationships "backward"

相关问题 更多 >