Какой из них вы предпочитаете, когда дело доходит до надлежащего дизайна & чистоты, а также производительность запросов?
Вариант А: (двунаправленная ссылка)
class Country(models.Model):
name = models.CharField(max_length=128)
capital = models.ForeignKey('City',related_name="country_capital", null=True)
class State(models.Model):
name = models.CharField(max_length=128)
capital = models.ForeignKey('City', related_name="state_capital", null=True)
country = models.ForeignKey('Country', null=True)
class City(models.Model):
name = models.CharField(max_length=128)
state = models.ForeignKey('State', null=True)
country = models.ForeignKey('Country', null=True)
Вариант B: (однонаправленный ссылка)
class Country(models.Model):
name = models.CharField(max_length=128)
class State(models.Model):
name = models.CharField(max_length=128)
country = models.ForeignKey('Country', null=True)
class City(models.Model):
name = models.CharField(max_length=128)
state = models.ForeignKey('State', null=True)
state_capital = models.BooleanField(default=False)
country_capital = models.BooleanField(default=False)
Search will be done as:
Get me all cities where name is Waterloo and country is US.
Get me all cities where country is UK.
Get me all states where country is US.
Get me a country where country is US. and capital is Washington DC.
Get me the capital where country is US.
Я поставил как государство, так и страну в Город() в варианте А по той же самой причине, что некоторые города не попадают под состояние. Таким образом, состояние будет NULL. Кроме того, unique_together будет использоваться для обеспечения отсутствия дубликатов в любых моделях, что выходит за рамки этого вопроса. Итак, вы говорите, что поедете с вариантом A, правильно? Thx Daniel. – un33k