我试图弄清楚如何定义两个模型之间的一对多关系。这里的困难在于我不想触摸其中一个模型,因此不能使用通常的ForeignKey(多对一)。
关于这个主题有很多问题,但他们都讨论了如何进行查找(反向ForeignKey查找),或者他们建议只在一侧添加外键。 这是一个similar question。我将使用相同的代码示例。 这就是我要找的东西:
class Dude(models.Model):
numbers = models.OneToManyField('PhoneNumber')
class PhoneNumber(models.Model):
number = models.CharField()
通常我会继续,只需按照许多答案中的建议将一个外键添加到PhoneNumber:
class PhoneNumber(models.Model):
dude = models.ForeignKey(Dude, related_name='numbers')
但在我的情况下,我不想触及PhoneNumber模型,因此在Dude模型上定义了一些内容。
这样做的原因是我正在定义一个描述很少使用的特殊情况的模型。如果我在(PhoneNumber)模型上使用ForeignKey,我将有99.9%的所有实例将此字段留空。我真的不喜欢有一个总是空白的领域的想法 - 也许这是我的问题。
一种可能的解决方法是定义一个多对多字段,然后添加一些逻辑,实际上一方面阻止'many'并强制另一方不为空。
我希望我能清楚地描述我的问题。
问题: 有没有办法定义一对多的关系?对我的问题采用不同的方法是否有更好的解决方案?
P.S。我从django docs得到的唯一一个是字段属性one_to_many,我猜,它用于查找。
答案 0 :(得分:0)
如果我在(PhoneNumber)模型上使用ForeignKey,我会有99.9%的模型将此字段留空。我真的不喜欢有一个总是空白的领域的想法 - 也许这是我的问题。
有点像。要定义一对多,请使用ForeignKey
,这需要在PhoneNumber
模型上。就我所见,这对您的方法没有任何缺点。听起来主要的问题是你已经习惯使用一个反过来做这个的库,所以这样做对你来说似乎很奇怪。
我害怕我不明白你的意思
99.9%的模型将此字段留空
除非您通过设置null=True, blank=True
等来允许,否则他们不能将其留空。