Я пытаюсь настроить этот API, чтобы я мог использовать «PUT» для обновления одного или нескольких «TAG» на элементе в модели «MOVIE». Теги - M2M на MOVIE. Я размещаю на ПК номер в фильме.Обновление поля ManyToMany с отдыхом Django
Моя работа httpie (возвращает 200OK), но ничего не создается. Когда я отправляю весь JSON (используя выборку), он просто создает TAG, но отношения M2M на MOVIE (link).
httpie
http -f PUT http://localhost:8000/api/Edit/3/ tag:='{"name": "TEST"}'
Models.py
class Tag(models.Model):
name = models.CharField("Name", max_length=5000, blank=True)
taglevel = models.IntegerField("Tag level", null=True, blank=True)
class Movie(models.Model):
title = models.CharField("Whats happening?", max_length=10000, blank=True)
tag = models.ManyToManyField('Tag', blank=True)
Serializers.py
class Tag1Serializer(serializers.ModelSerializer):
class Meta:
model = Tag
fields = ('name',)
class EditSerializer(serializers.ModelSerializer):
tag = Tag1Serializer(many=True, read_only=True)
class Meta:
model = Movie
fields = ('title', 'tag', 'info', 'created', 'status')
def update(self, instance, validated_data):
import pdb; pdb.set_trace()
tags_data = validated_data.pop('tag')
for tag_data in tags_data:
tag_qs = Tag.objects.filter(name__iexact=tag_data['name'])
if tag_qs.exists():
tag = tag_qs.first()
else:
tag = Tag.objects.get(**tag_data)
instance.tag.add(tag)
return movie
Views.py
class MovieViewSet(viewsets.ModelViewSet):
queryset = Movie.objects.all()
serializer_class = MovieSerializer
Ошибка:
Traceback
tags_data = validated_data.pop('tag')
KeyError: 'tag'
Является ли django для python, как бутстрап, чтобы css? –
Нет, django - это фреймворк на вершине Python с установленной структурой, как настроить свои модели, URL-адреса, шаблоны и т. Д. Давайте продолжим тему :) – Ycon