django: как узнать, создана ли модель с полем m2m, а не None

#django #django-models

#django #django-модели

Вопрос:

Итак, в основном я пытаюсь переопределить метод сохранения модели, чтобы определить, указано ли определенное необязательное поле, которое является полем m2m. Если да, то обновите одно из его собственных логических полей на True. В настоящее время у меня есть что-то вроде этого:

 class Flag(models.Model):
    name = models.CharField(max_length=300)
    def __str__(self):
        return self.name

class Model(models.Model):
    BooleanField = models.BooleanField(default = False)
    m2mField = models.ManyToManyField(Flag)


    def save(self, *args, **kwargs):
            super(Model, self).save(*args, **kwargs)
            if Model.objects.filter(id = self.id, m2mField = None).exists():
                Model.objects.filter(id = self.id).update(BooleanField = True)
  

И сейчас это у меня не работает. Мне все равно, что находится в поле m2m, просто пытаюсь узнать, указано ли это поле пользователем при создании этого экземпляра.

TIA

Редактировать: я обновляю более реалистичное определение.

Комментарии:

1. Пожалуйста, сделайте ваш пример кода немного более полным с фактическим именем модели, полем m2m и определениями логических полей. Вам легче помочь, если вы предоставите реалистичный код.

2. Вы должны фильтровать по your_m2m_field__isnull=True

3. Было бы легче понять вашу проблему, если бы у нас был код определения модели.

4. Привет, спасибо, я попытался добавить больше деталей в обновление, и я попытался фильтровать по isnull, но у меня все еще не работает

Ответ №1:

Вы могли бы попробовать проверить, больше ли количество полей m2mField больше 0, например:

 class Model(models.Model):
    BooleanField = models.BooleanField(default = False)
    m2mField = models.ManyToManyField(Flag, blank=True)


    def save(self, *args, **kwargs):
        self.BooleanField = True if self.pk is not None and self.m2mField.count() > 0 else False
        super(Model, self).save(*args, **kwargs)
  

Вероятно, было бы неплохо передать blank=True аргумент в m2mField.