【问题标题】:Type Error while creating Nested Objects in Single Shot in Django REST Framework在 Django REST 框架中单次创建嵌套对象时出现类型错误
【发布时间】:2020-11-01 14:41:10
【问题描述】:

我试图在 DRF 中创建一个嵌套对象,但是,总是会出现以下错误:

    TypeError at /leads/lead/
    create() takes 1 positional argument but 2 were given

我正在尝试通过模型视图集接收数据。每个潜在客户都应该有类型、语言和业务(这三者都是多对多领域)。

这是我的序列化器创建方法:


    class LanguageSerializer(serializers.ModelSerializer):
        class Meta:
            model = Language
            fields = "__all__"
    
    class GenreSerializer(serializers.ModelSerializer):
        class Meta:
            model = Genre
            fields = "__all__"
    
    class BusinessSerializer(serializers.ModelSerializer):
        class Meta:
            model = Business
            fields = "__all__"

    class LeadSerializer(serializers.ModelSerializer):
        language_id = LanguageSerializer(many=True)
        genre_id = GenreSerializer(many=True)
        business_id = BusinessSerializer(many=True)
        class Meta:
            model = Lead
            fields = "__all__"
    
        def create(self, validated_data):
            language_data = validated_data.pop("language_id")
            genre_data = validated_data.pop("genre_id")
            business_data = validated_data.pop("business_id")
    
            languages = []
            genres = []
            businesses = []
            lead = Lead.objects.create(**validated_data)
    
            for language in language_data:
                language_obj = Language.objects.create(language)
                lead.language_id.add(language_obj)
    
            for genre in genre_data:
                genre_obj = Genre.objects.create(genre)
                lead.genre_obj.add(genre_obj)
    
    
            for business in business_data:
                business_obj = Business.objects.create(business)
                lead.business_id.add(business_obj)
    
            return lead

以下是模型:

from django.db import models
from django.conf import settings

# Create your models here.
class Genre(models.Model):
    name            = models.CharField(max_length=255)
   ...

class Language(models.Model):
    name            = models.CharField(max_length=255)
 

class Business(models.Model):
    ...
    name = models.CharField(max_length=255, choices=BUSINESS_CHOICES, default="other")
    ...



class Lead(models.Model):
    ...
    genre_id                = models.ManyToManyField(Genre)
    language_id             = models.ManyToManyField(Language) 
    business_id             = models.ManyToManyField(Business)

【问题讨论】:

    标签: django django-models django-rest-framework django-views django-forms


    【解决方案1】:

    正如错误所说,create 采用关键字参数,但您传递的是位置参数。 Genre.objects.create(genre) 是错误的。相反,您应该拥有Genre.objects.create(name=genre),因为模型的字段没有排序,因此它不知道genre 是哪个字段。与Language.objects.create(language)相同

    【讨论】:

      猜你喜欢
      • 2019-06-14
      • 1970-01-01
      • 1970-01-01
      • 2012-12-04
      • 2014-05-21
      • 2018-09-02
      • 2020-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多