Как связать две модели в __init__ через related_name при вызове только родителя, создавая пустой объект

У меня есть две модели, как показано ниже, связанные отношением OneToOneField. Как я могу проверить по related_name что существует связь с x.RelName до того, как я использую x.save (). Все ниже ...

models.py

class Parent(models.Model):
     name = models.CharField(max_length=255)
     member = models.ForeignKey(User, related_name="MemberUsr", blank=True, null=True, default=None, on_delete=models.CASCADE)


class Child(models.Model):
     child_name = models.CharField(max_length=255, null=True, blank=True)
     parent_name = models.OneToOneField(Parent, related_name='RelName', null=True, on_delete=models.CASCADE)

py manage.py shell

>>> from app1.models import Parent, Child

>>> x = Parent()

В этот момент должно быть искусственное соединение в _ _ init _ _

>>> x.RelName

Должно вернуться, что он искусственно привязан к Child. Если я запускаю x.save (), это, очевидно, создает связи. Но я хотел бы иметь возможность проверить с помощью related_name перед сохранением (), что существует привязка.

OK, я думаю, что вы неправильно понимаете создание объектов. Ошибка, о которой вы упоминаете, связана с тем, что вы не создаете родительский экземпляр до этого. Посмотрите документацию о Как сохранять объекты.

Например, в вашем случае:

from app1.models import Parent, Child
parent = Parent(name='Parent example', member= instance_user)     
parent.save() 
child = Child(child_name='Child', parent_name=parent)
child.save()

В данный момент можно написать проверку отношений child.RelName

Другое замечание: вам следует переименовать ваши поля в модели Child, назвав их просто 'name' и 'parent'.

Вернуться на верх