Я предполагаю, что это сделано специально, но вот мой сценарий: если я сохраняю Child без родителя, я хочу создать нового Parent.
class Parent(models.Model):
pass
class Child(models.Model):
parent = models.ForeignKey(Parent, on_delete=models.PROTECT, related_name='children')
def save(self, *args, **kwargs):
if self.parent is None: # error happens here
self.parent = Parent.objects.create()
super().save(*args, **kwargs)
c = Child()
c.save()
# django.db.models.fields.related_descriptors.RelatedObjectDoesNotExist: Child has no parent.
Я получаю вышеупомянутый RelatedObjectDoesNotExist при выполнении if self.parent is None
,Я также пробовал if not self.parent
, та же ошибка в той же строке.Я не хочу, чтобы родительское поле обнулялось.Достаточно просто чтения self.parent, даже чтобы проверить, нет ли его, достаточно, чтобы вызвать ошибку.
Это в Django 1.11, здесь возникает ошибка: https://github.com/django/django/blob/2b882a4bd954c8a6b1447f8fc0841a3352514c26/django/db/models/fields/related_descriptors.py#L193,, так что еслиЯ читаю это правильно, просто читая self.parent, я в конечном итоге в этом __get__
.
Как я могу "дать ему значение, если его нет", если я не могу проверитьчто это None?