在同一张父表上的多个外国钥匙,但带有唯一的标识符



i具有以下数据结构:

  • State具有state_idname。(示例:California
  • Area具有state_idarea_idname(示例:Area of San Francisco,其中包含一些村庄和旧金山)
  • Town具有town_idarea_idstate_idname。(示例:Town of San Francisco
  • Street具有street_idtown_idarea_idstate_idname

请注意以下内容:

  • state_id不是真实的ID(例如自动增量INT),而是每个状态的固定数字。
  • area_id既不是自动增量INT,而是固定的数字。这意味着两个不同的状态(足够大,可以拥有多个区域),将具有具有相同ID的州。(旧金山州将拥有旧金山(area_id = 1),纽约州将拥有NY(area_id = 1)。
  • town_id ...您猜对了,与state_idarea_id相同。

不要坚持为什么以这种方式构建数据,它超出了这个问题的范围,超越了我可以重构的内容。因此,不要浪费时间建议我改变这一点。我已经知道这是错误的,但是我不允许修复它。完整停止。

这意味着一个城镇必须包含area_idstate_id才能识别。街道需要包含town_idarea_idstate_id才能识别。

我如何表达与Django模型的关系,以便我可以进行area.towns并获取该地区的所有城镇,或者state.streets并在该州获得所有街道?

如果问题还不够清楚,我会很乐意使用您需要的任何信息进行更新,只需询问。

我很想解决数据模型的其他方面,但认为我在描述它们时了解了约束。对于定义state_id或重复的ID,我可能会有所偏离。我没有得到它们,但假设您可以通过自定义保存功能来实现这些定义。

class State(models.Model):
    #implicit autoincrement id
    name = models.CharField(max_length=200)
    state_id = models.IntegerField()
    def listAreasByState(self):
        return Area.objects.filter(state=self)
    def listAreasByStateID(self):
        return Area.objects.filter(state_id=self.state_id)

class Area(models.Model):
    #implicit autoincrement id
    name = models.CharField(max_length=200)
    state = models.ForeignKey(State, blank=True, null=Tru)
    state_id = models.IntegerField()
    area_id = models.IntegerField()
....

我得到了你的问题。我尚不清楚您在何处或如何定义state_id,Area_ID VICE区域的自动增量ID。但这听起来好像您想做的就是编写一个自定义功能,以返回每个父母的所有孩子。

最新更新