Django-rest-framework创建具有多对多关系的对象 [英] Django-rest-framework Create object with relationship many-to many

查看:338
本文介绍了Django-rest-framework创建具有多对多关系的对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要创建对象标记,并将其与对象任务多对多关联。我有这段代码,不知道为什么它不起作用。我看到错误无法将关键字任务解析为字段。选项包括:ID,名称,标签,
P.S.
我依靠这篇文章 manyToMany with django rest framework

I need to create object "Tag" with relationship many-to-many attached to object "Task".I have this code and don't understand why it doesn't work. I see error Cannot resolve keyword 'task' into field. Choices are: id, name, tags, P.S. I relied on this post manyToMany with django rest framework

.models

class Tag(models.Model):
    name = models.CharField(max_length=200)
    def __str__(self):
        return "{}".format(self.name)

class Task(models.Model):
    name = models.CharField(max_length=200, blank=True)
    tags = models.ManyToManyField(Tag)
    def __str__(self):
        return "{}".format(self.name)

.views

class TagCreateView(generics.ListCreateAPIView):
    serializer_class = TagSerializer

    def get_queryset(self):
        queryset = Tag.objects.all()
        task_id = self.kwargs.get('task_id', None)
        if task_id is not None:
            queryset = queryset.filter(task=task_id)
        return queryset
    def perform_create(self, serializer):
        task_id = self.kwargs.get('task_id', None)
        try:
            tasks = Task.objects.get(task__id__exact=task_id)
        except Task.DoesNotExist:
            raise NotFound()
        serializer.save(tag=tasks)

.serielizers

.serielizers

class TagSerializer(serializers.ModelSerializer):
    class Meta:
        model = Tag
        fields = ('id', 'name','')

class TaskSerializer(serializers.ModelSerializer):
    tag = TagSerializer(many=True, read_only=True)
    class Meta:
        model = Task
        fields = ('id', 'name', 'tags')
        read_only_fields = ('tags')

.urls

urlpatterns = {
url(r'^todolists/(?P<task_id>[0-9]+)/tags', TagCreateView.as_view(), name="tags")}


推荐答案

您需要处理序列化程序 create 方法中嵌套的序列化程序的创建;

You need to handle the nested serializers creation in the serializers create method;

如下所示: http://www.django-rest-framework .org / api-guide / serializers /#writing-create-methods-nested-representations

这篇关于Django-rest-framework创建具有多对多关系的对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆