属性错误位于/文件/

2024-10-01 15:42:14 发布

您现在位置:Python中文网/ 问答频道 /正文

当我要实现标记字段时,我得到以下错误

AttributeError: Got AttributeError when attempting to get a value for field tags on serializer CategorySerializers. The serializer field might be named incorrectly and not match any attribute or key on the Category instance. Original exception text was: 'Category' object has no attribute 'tags'.

型号.py

class Category(models.Model):
    name = models.CharField(max_length=100)

class Tag(models.Model):
    tag_name = models.CharField(max_length=30)

class FileUp(models.Model):
    name = models.ForeignKey(Category, on_delete=models.CASCADE)
    file = models.FileField(upload_to='path')
    tags = models.ManyToManyField(Tag)

    def __str__(self):
        return self.name.name

序列化程序.py

 class TagSerializers(serializers.ModelSerializer):
    class Meta:
        model = Tag
        fields = ['tag_name']


class FileSerializers(serializers.ModelSerializer):
    class Meta:
        model = FileUp
        fields = ['file']


class CategorySerializers(serializers.HyperlinkedModelSerializer):
    files = FileSerializers(source='file_set', many=True, read_only=True)
    tags = TagSerializers(many=True)

    class Meta:
        model = Category
        fields = ['id', 'name', 'files', 'tags']
        read_only_fields = ['tags']

def create(self, validated_data):
    files_data = self.context.get('view').request.FILES
    name = Category.objects.create(name=validated_data.get('name'))

    for file_data in files_data.values():
        FileUp.objects.create(name=name, file=file_data)

    return name

这是我尝试过的,我把标签放在类别模型中,但是当我要添加文件时,我不能添加标签或在管理面板中选择标签。但是,如果我添加标签到FileUp,我会得到上面显示的错误。我怎样才能申请标签归档?需要帮忙吗?你知道吗


Tags: nameselffieldsdatagetmodelonmodels
1条回答
网友
1楼 · 发布于 2024-10-01 15:42:14

使用SerializerMethodField参数

class CategorySerializers(serializers.HyperlinkedModelSerializer):
    files = FileSerializers(source='file_set', many=True, read_only=True)
    tags = serializers.SerializerMethodField() 

    def get_tags(self, category):
        return TagSerializers(Tag.objects.filter(fileup__name__categories=category), many=True).data

    class Meta:
        model = Category
        fields = ['id', 'name', 'files', 'tags']
        read_only_fields = ['tags']

相关问题 更多 >

    热门问题