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