i具有以下数据结构:
-
State
具有state_id
和name
。(示例:California
) -
Area
具有state_id
,area_id
和name
(示例:Area of San Francisco
,其中包含一些村庄和旧金山) -
Town
具有town_id
,area_id
,state_id
和name
。(示例:Town of San Francisco
) -
Street
具有street_id
,town_id
,area_id
,state_id
和name
。
请注意以下内容:
-
state_id
不是真实的ID(例如自动增量INT),而是每个状态的固定数字。 -
area_id
既不是自动增量INT,而是固定的数字。这意味着两个不同的状态(足够大,可以拥有多个区域),将具有具有相同ID的州。(旧金山州将拥有旧金山(area_id = 1
),纽约州将拥有NY(area_id = 1
)。 -
town_id
...您猜对了,与state_id
和area_id
相同。
不要坚持为什么以这种方式构建数据,它超出了这个问题的范围,超越了我可以重构的内容。因此,不要浪费时间建议我改变这一点。我已经知道这是错误的,但是我不允许修复它。完整停止。
这意味着一个城镇必须包含area_id
和state_id
才能识别。街道需要包含town_id
,area_id
和state_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。但这听起来好像您想做的就是编写一个自定义功能,以返回每个父母的所有孩子。