AttributeError в / files / - PullRequest
       16

AttributeError в / files /

0 голосов
/ 29 мая 2019

когда я собираюсь реализовать поле тега, я получаю следующую ошибку

AttributeError: Получил AttributeError при попытке получить значение для поля tags на сериализаторе CategorySerializers.Поле сериализатора может иметь неправильное имя и не соответствовать ни одному атрибуту или ключу в экземпляре Category.Исходный текст исключения был: объект «Категория» не имеет атрибута «теги».

models.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

serializers.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

вот что я пробовал, я поместил Tag в Category модель, но когда я собираюсь добавить файлы, я не могу добавить теги к немуили выберите теги в панели администратора.Но, если я добавлю Tag в FileUp, я получу сообщение об ошибке, показанное выше.Как я могу применить к тегу FileUp?любая помощь, пожалуйста?

1 Ответ

1 голос
/ 29 мая 2019

Использовать SerializerMethodField параметр,

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

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

    class Meta:
        model = Category
        fields = ['id', 'name', 'files', 'tags']
        read_only_fields = ['tags']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...