首页 > 解决方案 > TypeError:create() 为关键字参数“名称”获取了多个值

问题描述

我目前在使用 Django 休息框架执行嵌套时遇到问题,我认为问题出在我的循环中,但无法理解我已经完成了大部分答案,但没有任何帮助。任何帮助,将不胜感激。提前致谢!!

模型

    class Category(models.Model):
        name = models.CharField(max_length=36, unique=True)


    class sub_category(models.Model): 
        parentCategory = models.ForeignKey(Category, blank=True, null=True, 
        related_name='subcategories',
        on_delete=models.CASCADE)
        name = models.CharField(max_length=36, unique=True)

    class childern(models.Model):
        parentCategory = models.ForeignKey(sub_category, blank=True, null=True, 
        related_name='subcategories',
        on_delete=models.CASCADE)
        name = models.CharField(max_length=36, unique=True)

封口机

    class ChildernSerializer(serializers.ModelSerializer):
        id = serializers.PrimaryKeyRelatedField(read_only=True)
   
        class Meta:
            model = childern
            fields = ['name',
              'id',]

     class SubCategorySerializer(serializers.ModelSerializer):
         id = serializers.PrimaryKeyRelatedField(read_only=True)
         subcategories = ChildernSerializer(many=True)
         class Meta:
             model = sub_category
             fields = ['name',
              'subcategories',
              'id',]

         def create(self, validated_data):
             sub_cat = validated_data.pop('subcategories')
             name = Category.objects.create(**validated_data)
             for cat in sub_cat:
                 sub_category.objects.create(**cat, name=name)
             return name

    class CategorySerializer(serializers.ModelSerializer):
        subcategories = SubCategorySerializer(many=True)

        class Meta:
            model = Category
            fields = [
            'name',
            'subcategories',

               ]

        def create(self, validated_data):
            sub_cat = validated_data.pop('subcategories')
            name = Category.objects.create(**validated_data)
            for cat in sub_cat:
                sub_category.objects.create(**cat, name=name)
            return name

标签: djangodjango-rest-framework

解决方案


您需要namecat数据中弹出 ,否则名称将同时出现在参数中cat 通过name=name参数:

def create(self, validated_data):
    sub_cat = validated_data.pop('subcategories')
    name = Category.objects.create(**validated_data)
    for cat in sub_cat:
        cat.pop('name', None)
        sub_category.objects.create(**cat, name=name)
    return name

推荐阅读