Я не уверен, что вы пытаетесь сделать в вашем методе clean()
, но я предполагаю, что вы пытаетесь ограничить ненулевое условие для внешнего ключа.Все поля не ограничены пустыми значениями по умолчанию, и вы должны установить null=False
и blank=False
, если хотите, чтобы поле принимало пустые значения:
class AModel(models.Model):
fk = models.ForeignKey(FKModel, null=True, blank=True)
a_value = models.CharField(max_length=150)
Если вы хотите ограничить ненулевое условие длявручную, вы должны сделать это следующим образом:
class FKModel(models.Model):
value = BooleanField()
class AModel(models.Model):
fk = models.ForeignKey(FKModel)
a_value = models.CharField(max_length=150)
def clean(self, *args, **kwargs):
# the line below is correct
if self.fk is None: # <--- this is the proper way?
raise ValidationError('FKModel value is False')
super(AModel, self).clean(*args, **kwargs)
def save(self, *args, **kwargs):
self.full_clean()
super(AModel, self).save(*args, **kwargs)
Для извлечения записей базы данных и связанных с ней записей вы используете prefetch_related , и вы получаете свою запись и связанные с ней записи в одномпопадание в одну базу данных:
AModel.objects.all().prefetch_related('fk')