Reputation: 275
when I am going to implement tag field I am getting following error
AttributeError: Got AttributeError when attempting to get a value for field
tags
on serializerCategorySerializers
. The serializer field might be named incorrectly and not match any attribute or key on theCategory
instance. Original exception text was: 'Category' object has no attribute 'tags'.
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
here is what I tried, I have put Tag in Category model but when I am going to add files I cannot add tags to it or select tags in the admin panel. But, If I add Tag to FileUp I am getting error above shown. How can I apply to Tag to FileUp? any help please?
Upvotes: 0
Views: 71
Reputation: 88429
Use SerializerMethodField
parameter,
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']
Upvotes: 1