我正忙于处理基于美国淡水湖的数据集。
所以我的模型基本上是州和湖。国家是湖上的外键。
当我开始加载数据时,我很快意识到一些湖泊似乎与多个州接壤。例如伊利湖进入4个州+一个国际边界。
然后我不得不重新考虑一下我的模型,并得出如下结论:,
class State(models.Model):
name = models.CharField(max_length=200, null=True)
def __str__(self):
return str(self.name)
class Lake(models.Model):
state = models.ForeignKey(State, on_delete=models.CASCADE, verbose_name="primary state", related_name="related_primary_state", help_text="Primary State")
state_secondary = models.ForeignKey(State, on_delete=models.CASCADE, null=True, blank=True, related_name="related_secondary_state", verbose_name="secondary state", help_text="Secondary State")
state_three = models.ForeignKey(State, on_delete=models.CASCADE, null=True, blank=True, related_name="related_three_state", verbose_name="three state", help_text="three State")
state_four = models.ForeignKey(State, on_delete=models.CASCADE, null=True, blank=True, related_name="related_four_state", verbose_name="four state", help_text="four State")
state_five = models.ForeignKey(State, on_delete=models.CASCADE, null=True, blank=True, related_name="related_five_state", verbose_name="five state", help_text="five State")
name = models.CharField(max_length=200, null=True)
def __str__(self):
return str(self.name)
这样做可以吗,还是有更好的方法?
谢谢!
1条答案
按热度按时间7vhp5slm1#
你最好使用这样的多对多关系:
这样你就不必担心一个给定的湖有多少个州是被指定的。然后,您可以将任意多个州关联到给定的湖泊:
您可以按如下方式检索所有状态:
有关详细信息,请参阅文档:https://docs.djangoproject.com/en/3.0/topics/db/examples/many_to_many/