Правильный способ моделирования отношений "один к одному" в Django
Я ищу правильный способ моделирования таких утверждений в Django:
1. "A Condition has exactly 2 Blocks: leftBlock and rightBlock"
2. "LeftBlock and RightBlock have the same fields in common"
3. "Blocks must be different in a Condition"
4. "A Block only belongs to 1 Condition"
Вот мои рассуждения:
- Я выделил 2 модели: Условие и Блок.
- Чтобы выразить 1, условие должно иметь 2 поля с именами типа "левый_блок" "правый_блок" .
- Для выражения 2 достаточно одной модели под названием Block вместо двух лишних.
- Что касается 3, это может быть сделано с помощью DJango CheckConstraint, но я не уверен.
- Что касается 4, я считаю, что у нас есть отношения один-к-одному между условием и блоком.
Наконец, мои модели:
class Condition(models.Model):
condition_id = models.UUIDField(
primary_key=True, default=uuid.uuid4, editable=False, unique=True)
left_block = models.OneToOneField(Block, on_delete=models.CASCADE, null=True, related_name='left_block')
right_block = models.OneToOneField(Block, on_delete=models.CASCADE, null=True, related_name='right_block')
class Block(models.Model):
block_id = models.UUIDField(
primary_key=True, default=uuid.uuid4, editable=False, unique=True)
name = models.CharField(max_length=16)
Итак, правильно ли это? Если нет, то как я могу справиться с такой ситуацией?