Ric*_*ckD 38 python django django-models
我正在尝试创建3个模型; Person,Address和Anniversy.计划是为每个人提供一个地址和一个周年纪念.但每个地址和周年纪念可以有多个人.
到目前为止,我有以下几点,但我认为这种OneToMany(foreign key)关系可能是错误的.即每个地址可以有一个人,但每个人可以有多个地址.
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)
Mar*_*ers 73
你以相反的方式创造了关系; 将外键添加到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条目中引用.
Anniversary并且Address对象也将被赋予反向的向后关系; 默认情况下,它会被调用,person_set但如果需要,您可以配置不同的名称.请参阅查询文档中的"向后"关系.
我建议,ForeignKey如果利用基于应用程序的方法来分离逻辑问题,那么使用字符串模型引用来建立关系是更好的做法。
因此,扩展 Martijn Pieters 的答案:
class Person(models.Model):
    name = models.CharField(max_length=50)
    birthday = models.DateField()
    anniversary = models.ForeignKey(
        'app_label.Anniversary', on_delete=models.CASCADE)
    address = models.ForeignKey(
        'app_label.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()
| 归档时间: | 
 | 
| 查看次数: | 85143 次 | 
| 最近记录: |