我有以下Django模型:
class Article(models.Model):
name = models.CharField(max_length=30, unique=True)
tags = models.ManyToManyField(Tag)
...
class Tag(models.Model):
name = models.CharField(max_length=30, unique=True)
...
我希望能够在通过POST请求创建文章时添加现有标签列表,即
{ 'name': 'My Org Name', 'tags': [1,2,3] }
其中[1,2,3]是标签ID列表 .
我的序列化器看起来像这样:
class ArticleSerializer(serializers.ModelSerializer):
tags = serializers.PrimaryKeyRelatedField(many=True, read_only=True, allow_null=True)
class Meta:
model = Article
fields = ('name', 'tags', ...)
def create(self, validated_data):
# in create I will add tags, i.e. article.add(tag)
return Article.objects.create_article(**validated_data)
但后来我想进行一些验证,以便我知道传入的标记ID属于现有的Tag实例 . 所以我尝试将下面的方法添加到我的序列化程序中 .
def validate_tags(self, tags):
if tags:
for tag in tags:
if not Tag.get(pk=tag):
raise ValueError('Tag with id not found...')
return tags
由于某些原因,不会触发此验证方法 . 我正在试图找出处理文章添加标签的正确方法,任何建议都将受到高度赞赏 .
1 回答
由于您从序列化器 ModelSerializer 扩展,因此您不需要验证它们,也无需验证它们 . DRF完成剩下的工作并根据Model关系创建字段和验证查询 .