Создать объект в модели, имеющей отношение foreigkey

#django #django-models

#django #django-модели

Вопрос:

Я хочу создать запись в этом Something model в python manage.py оболочка, использующая это Someting.objects.create(discussion_title="General", user_username="admin", content="Hello")

пример модели

 class Discussion(models.Model):
    title = models.CharField(max_length=255, unique=True, blank=False,)
    users = models.ManyToManyField(User, blank=True, )


class Something(models.Model):

    user = models.ForeignKey(User,
                         on_delete=models.CASCADE)
    discussion = models.ForeignKey(Discussion, on_delete=models.CASCADE)
    timestamp = models.DateTimeField(auto_now_add=True)
    content = models.TextField(unique=False, blank=False)
 

Я получаю эту ошибку
TypeError: Something() got an unexpected keyword argument 'discussion_title'

Ответ №1:

Во-первых, вы должны использовать double под bar __ , чтобы использовать выражение отношения модели django.

 Someting.objects.get(discussion__title="General", user__username="admin", content="Hello")
 

Во-вторых, вы не можете использовать выражение отношения double under bar при создании объекта.
если вы хотите создать объект в отношении, вы должны создавать шаг за шагом. следуйте ответу @Nicolas Appriou

Ответ №2:

В вашей модели Something нет поля discussion_title . Для этого вам необходимо создать экземпляр обсуждения.

Эта модель также не имеет модели user_username .

 discussion = Discussion.objects.create(title="Foobar")
discussion.users.add(User.objects.create(username="Ham")
Something.objects.create(
    discussion=discussion,
)
 

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

1. Можете ли вы объяснить это подробнее или направить меня к некоторым документам? Как, скажем title = "Foobar" , уже существует в модели обсуждения, и у меня есть пользователь username = "Ham" . Будет ли это работать?

2. Это основы доступа к базе данных в django. Я могу только дать вам ссылку на документацию модели. docs.djangoproject.com/en/3.1/topics/db/models/#relationships