【发布时间】: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