0
我正在尝试发布默认值。使用DRF中的序列化程序发布默认值
用简单的英语,这就是我想要的工作:
- 如果数据没有“标签”字段(S)
- 检查是否标记为“无”的情况下(对“主人“)
- 如果标记为‘无’的存在,创建M2M
- 如果标记为“无”不存在,创建标签没有(对‘主人’)
我后数据将不是包含正在发布的JSON数据中的字段tag
。
此代码工作完全在没有tag
场
当没有标记字段,它告诉
示例数据我“是必需的标签字段”被张贴
{title: "Testing"}
EXCEPT
Models.py
class Tag(models.Model):
name = models.CharField("Name", max_length=5000, blank=True)
taglevel = models.IntegerField("Tag level", null=True, blank=True)
owner = models.ForeignKey('auth.User', blank=True, null=True)v
class Item(models.Model):
title = models.CharField("Title", max_length=10000, blank=True)
tag = models.ManyToManyField('Tag', blank=True)
owner = models.ForeignKey('auth.User', blank=True, null=True)
串行
class ItemSerializer(serializers.ModelSerializer):
tag = TagSerializer(many=True, read_only=False)
info = InfoSerializer(many=True, read_only=True)
class Meta:
model = Item
ordering = ('-created',)
fields = ('title', 'pk', 'tag')
def create(self, validated_data):
tags_data = validated_data.pop('tag')
owner = self.context['request'].user
item = Item.objects.create(owner=owner, **validated_data)
for tag_data in tags_data:
tag_data['owner'] = owner
tag_qs = Tag.objects.filter(name__iexact=tag_data['name'])
if not tag_data:
Tag.objects.get_or_create(tag_name="None")
if tag_qs.exists():
tag = tag_qs.first()
else:
tag = Tag.objects.create(**tag_data)
item.tag.add(tag)
return item
不,这并不工作。它停止了“需要标记字段”的错误,但没有设置它需要的默认“标记字段”。请给出另一个建议 – Ycon
@Ycon,而不是'default = None'把'required = False'请 – doggra
不行。我已经使用了'require = False',但它给了我一个关键的错误。如果'get_or_create'不存在,实际上会创建一个名为“None”的标签吗?这是追溯http://dpaste.com/1BYMTDT – Ycon