【发布时间】:2018-02-13 12:07:49
【问题描述】:
我想创建一个与另一个模型(标签)具有多对多关系的模型(源)并创建一个源对象,而不在数据库中复制标签实例。 这是我的模型:
class Tag(models.Model):
name = models.CharField(max_length=50, null=False, default='source')
def __unicode__(self):
return self.name
class Source(models.Model):
title = models.CharField(max_length=200)
author = models.CharField(max_length=200)
language = models.CharField(max_length=50)
color = models.CharField(max_length=50, default='white')
isFile = models.BooleanField(default=False)
link = models.TextField(default='')
file = models.FileField(upload_to='uploads/', null=True)
tags = models.ManyToManyField('Tag')
class Meta:
ordering = ('title',)
这是我的序列化程序:
class TagSerializers(serializers.HyperlinkedModelSerializer):
class Meta:
model = Tag
fields = ('name',)
class SourceSerializers(serializers.ModelSerializer):
tags = TagSerializers(many=True)
class Meta:
model = Source
fields = ('title', 'author', 'language', 'color', 'isFile', 'link', 'file', 'tags')
def create(self, validated_data):
tags_data = validated_data.pop('tags')
source = Source.objects.create(**validated_data)
for tag in tags_data:
t = Tag.objects.create()
t.name = tag.get("name")
t.save()
source.tags.add(t)
source.save()
return source
但是当我尝试通过 http 请求创建 Source 对象时 - 该对象已创建,但没有对标签的任何引用。经过一番研究,我发现create(self,validated_data) 中的validated_data 不包含“tags”字段,而且我发现TagSerializer 的验证函数在任何时候都没有被调用。我做错了什么?
【问题讨论】:
-
你的有效载荷是什么?
标签: python django django-rest-framework