#django #django-models
#django #django-модели
Вопрос:
У меня есть Outcode
модель, которая имеет отношение «один ко многим» с SubOutcode
моделью:
class Outcode(models.Model):
outcode = models.CharField(max_length=4, primary_key=True)
class Meta:
managed = True
db_table = 'outcode'
SubOutcode
Модель:
class SubOutcode(models.Model):
outcode = models.ForeignKey('Outcode', models.DO_NOTHING)
sub_outcode = models.CharField(max_length=4, default="")
class Meta:
managed = True
constraints = [
models.UniqueConstraint(fields=['outcode', 'sub_outcode'], name='unq_sub_outcode')
]
db_table = 'sub_outcode'
Я хочу иметь возможность создавать Property
записи, только если существует соответствующая комбинация полей SubOutcode
. Как мне Property
правильно настроить? Моя текущая настройка не работает так, как она выглядит, если Outcode
и SubOutcode
существуют отдельно, как показано ниже, но я хочу Property
применить комбинацию, если это имеет смысл? Спасибо за вашу помощь.
class Property(models.Model):
property_outcode = models.ForeignKey('Outcode', models.DO_NOTHING)
property_sub_outcode = models.ForeignKey('SubOutcode', models.DO_NOTHING, to_field='sub_outcode')
Ответ №1:
В приведенном выше коде экземпляры SubOutcode могут существовать только в том случае, если у них есть ссылка на экземпляр Outcode. Это потому, что вы не установили null=True
внешний ключ для вложенного кода.
Таким образом, вы могли бы просто удалить property_outcode в своей модели свойств, так как его вложенный код должен иметь внешний ключ, указывающий на экземпляр Outcode:
class Property(models.Model):
property_sub_outcode = models.ForeignKey('SubOutcode', models.DO_NOTHING, to_field='sub_outcode')
Теперь ваши экземпляры свойств всегда будут существовать только в том случае, если его ссылка на вложенный код также имеет экземпляр Outcode.
Если у вас есть property_instance и вы хотите знать, на какой экземпляр Outcode ссылается его SubOutcode, используйте: property_instance.property_sub_outcode.outcode
.