#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.