Позвольте отдельным полям модели в Django быть нулевыми, но не допускайте, чтобы все они были нулевыми - PullRequest
0 голосов
/ 22 мая 2018

У меня есть класс модели Django следующим образом:

class IPGroup(BaseModel):
    """
        Stores IP Groups
    """
    name = models.CharField(max_length=50, unique=True)
    team = models.ForeignKey(Team, on_delete=models.CASCADE)
    _ips = models.ManyToManyField(IP, through='connectivity_service.IPGroupToIP', null=True)
    _cidrs = models.ManyToManyField(CIDR, through='connectivity_service.IPGroupToCIDR', null=True)
    _ip_groups = models.ManyToManyField('self', through='connectivity_service.IPGroupToIPGroup', null=True,
                                        symmetrical=False)

    def __unicode__(self):
        return f'{self.name}'

    class Meta:
        app_label = 'connectivity_service'

Как видно, поля _ips, _cidrs и ip_groups могут быть нулевыми в базе данных. Однако я хочупредотвратить сохранение всех трех из них вместе при сохранении модели.Другими словами, когда модель сохранена, по крайней мере одно из этих 3 полей не должно быть нулевым.

1 Ответ

0 голосов
/ 22 мая 2018

Во-первых, null не имеет никакого значения для поля «многие ко многим», поскольку на самом деле это не столбец в базе данных, а запись в совершенно отдельной таблице.

В любом случае, если вы хотите, чтобы хотя бы одно из этих полей было не пустым, вам нужно сделать это во время проверки;это не то, что вы можете просто указать в определении модели.

Но учтите также, что по той же причине, что и выше, вы не можете сделать это до создания модели на начальном этапе;поля многие-ко-многим не могут иметь значения до создания, потому что им нужен идентификатор для создания элемента в сквозной таблице.

...