gpt4 book ai didi

python - 外键 Django 模型

转载 作者:IT老高 更新时间:2023-10-28 21:44:27 27 4
gpt4 key购买 nike

我正在尝试创建 3 个模型; PersonAddressAnniversy。计划是为每个人设置一个地址和一个纪念日。但是每个地址和纪念日可以有多个人。

到目前为止,我有以下内容,但我认为 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)

最佳答案

您以相反的方式创建关系;将外键添加到 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 模型。

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

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

关于python - 外键 Django 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14663523/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com