Задать вопрос

Как решить ошибку при обновление данных ManyToManyField?

Итак, у меня есть точка входа /surveys//. Я обращаюсь к ней PUT методом для обновления данных и передаю следующие данные:
{
    "id": 135,
    "statuses": [],
    "name": "asdasdasdsad",
    "description": "asdasdasdasd",
    "unique_url": "eecc2d5de02543bfba909d1660f8798f",
    "is_active": false,
    "is_anonymous": false,
    "have_answers": false,
    "created_at": "2018-08-30T20:02:29.231761",
    "answers_count": 0,
    "expiration_date": null,
    "creator": 167
}


И у меня вылетает ошибка:
Cannot set values on a ManyToManyField which specifies an intermediary model. Use surveys.Status's Manager instead.


Модели:
class Survey(models.Model):
    name = models.CharField(max_length=255, help_text="input survey name", verbose_name='survey name')
    description = models.TextField(blank=True,
                                   help_text="input description")
    creator = models.ForeignKey(User, models.CASCADE, help_text="creator survey")
    unique_url = models.CharField(max_length=200, null=True, unique=True, verbose_name='url')
    is_active = models.BooleanField(null=False, default=False)
    is_anonymous = models.BooleanField(null=False, default=False)
    have_answers = models.BooleanField(default=False)
    statuses = models.ManyToManyField(User, through='Status', related_name='statuses')
    created_at = models.DateTimeField(auto_now_add=True,null=True)
    answers_count = models.IntegerField(default=0)
    expiration_date = models.DateField(null=True, default=None, blank=True)

    class Meta:
        verbose_name = 'Опрос'

    def __str__(self):
        return "Survey. Name: %s, Description: %s" % (
            self.name, self.description)

class Status(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE,related_name='status_user')
    survey = models.ForeignKey(Survey, on_delete=models.CASCADE)
    is_passed = models.BooleanField(default=False)
    class Meta:
        unique_together = ('user', 'survey')

    def finish_survey(self):
        self.is_passed = True
        self.save()


Сериализатор:
class StatusSerializer(serializers.ModelSerializer):
    class Meta:
        model = Status
        fields = ('__all__')

class SurveySerializer(serializers.ModelSerializer):
    statuses = StatusSerializer(many=True,required=False, read_only=True)
    class Meta:
        model = Survey
        fields = ('__all__')
  • Вопрос задан
  • 134 просмотра
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
k0t3n
@k0t3n
Python, InfoSec, IT
Возможно, вместо
"statuses": []
стоит передавать
"statuses": null
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы