python Django-taggit:不能让所有的数据都有键在标签对象

mznpcxlj  于 2023-06-20  发布在  Python
关注(0)|答案(1)|浏览(61)

我试图实现我的事件模型与标签对象嵌套它。但标签只有名称字段,我需要两个ID,名称和蛞蝓以及。
这是我的模型看起来像
model.py

class Event(models.Model):
    title = models.CharField(max_length=151, db_index=True)
    description = models.TextField(blank=True, null=True)
    tags = TaggableManager()
serializers.py

class EventSerializer(serializers.ModelSerializer):
    slug = serializers.SerializerMethodField()
    tags = TagListSerializerField()

我得到的结果:

{
            "id": 52,
            "slug": "52-aperiam-amet",
            "tags": [
                "hello",
                "world"
            ],
            "title": "Aperiam amet",
            "description": "Quibusdam ipsum sun Quibusdam ipsum sun Quibusdam ipsum sun ",
        },

但预期的标记嵌套应该如下所示

"tags": [
                {
                   id:"1",
                   slug:'1-hello',
                   name:"hello"
                },
                {
                   id:"2",
                   slug:'2-world',
                   name:"world"
                },
            ],
bvjxkvbb

bvjxkvbb1#

您可以使用TagSerializer

from taggit.models import Tag

class TagSerializer(serializers.ModelSerializer):
    class Meta:
        model = Tag
        fields = ('id', 'name', 'slug')

然后使用:

class EventSerializer(serializers.ModelSerializer):
    slug = serializers.SerializerMethodField()
    tags = TagSerializer(many=True)

也就是说,Taggit的目标是隐藏标记模型,并将其公开为字符串,这可能是django-taggit的主要任务,并且可能更好,因为公开主键使其更加复杂。

相关问题