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'
    )
Вернуться на верх