E TypeError: Прямое присвоение прямой стороне множества "многие ко многим" запрещено. Вместо этого используйте subjects.set()
Я пишу тест для некоторых вызовов api, проблема, которую я получаю, заключается в том, что я не могу понять, как назначить переменную (субъекты) "многие ко многим" в Django.
models.py
class Subject(BaseModel):
id = models.AutoField(primary_key=True)
name = models.TextField(null=False, blank=False)
answers = models.ManyToManyField("registration.Answer", through="AnswerSubject")
class Answer(BaseModel):
id = models.AutoField(primary_key=True)
text = models.TextField(null=False, blank=False)
subjects = models.ManyToManyField("subjects.Subject", through="subjects.AnswerSubject")
test.py
def tets_get_answer:
Answer.objects.create(
text=f'{"test answer"}',
subjects = f{"test subject"} # the error is here, how do I assign subjects?
),
........
вот ошибка, которую я получаю:
E TypeError: Direct assignment to the forward side of a many-to-many set is prohibited. Use subjects.set() instead.
Any help is appreciated
Вы создаете модель Subject и устанавливаете ее позже:
def tets_get_answer(self):
answer = Answer.objects.create(
text='test answer',
# no subjects
# …
)
subject = Subject.objects.create(
name='test subject'
)
answer.subjects.add(subject)
Однако нет причин определять ManyToManyField дважды: если вы определяете отношение в Django, Django автоматически определяет и обратное отношение. Вы можете указать имя этого обратного отношения с помощью параметра related_name=… [Django-doc]:
class Subject(BaseModel):
name = models.TextField()
# no answers
class Answer(BaseModel):
text = models.TextField()
subjects = models.ManyToManyField(
Subject,
through='subjects.AnswerSubject',
related_name='answers'
)