如何在Django的模型视图集和模型序列化器中接收多对多字段值?

问题描述

我有一个带有两个模型Post和Categories的Simeple应用程序。帖子将包含三个字段:标题,正文和分配的类别,应预先创建。用户将首先创建类别,然后使用在“分配的类别”字段中放置的类别来创建帖子。

我正在发送这样的值->

     { 
       "id": 5,"title": "title 1","body": "body","categories_assigned": [
           {
            "id": 1,"name": "technlogy"
           }              
        ]
     }

但是我尝试将字典放在多对多字段中。我只将值作为数组中的有序dict接收。

[OrderedDict([('name','technlogy')])]

我知道我可以将它放在for循环中,并使用i [“ name”]下标它...但是它仅给我提供name属性。我希望唯一的ID在很多字段中添加,以防有很多类别对象的名称=技术

我的serializers.py文件->

class CategorySerilizer(serializers.ModelSerializer):
    class Meta:
        model = models.Category
        fields = ['id','name']

class PostSerializer(serializers.ModelSerializer):
    categories_assigned = CategorySerilizer(many = True)

    class Meta:
        model = models.Post
        fields = ['id','title','body','categories_assigned']

    def create(self,validated_data):
        post = models.Post.objects.create(title = validated_data["title"],body = validated_data["body"])
        print(validated_data["categories_assigned"])
        for i in validated_data["categories_assigned"]:
            print(i["name"]) // 'technlogy'
               

        return post

我的models.py文件->

class Post(models.Model):
    title = models.CharField(max_length=100)
    body = models.CharField(max_length=500)
    categories_assigned = models.ManyToManyField("Category",blank=True)

    def __str__(self):
        return str(self.title)

class Category(models.Model):
    name = models.CharField(max_length=30)

    def __str__(self):
        return str(self.name)

这是我的视图文件,它们很简单->

class PostView(viewsets.ModelViewSet):
    serializer_class = serializers.PostSerializer
    queryset = models.Post.objects.all()


class CategoryView(viewsets.ModelViewSet):
    serializer_class = serializers.CategorySerilizer
    queryset = models.Category.objects.all()

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)