Я пытаюсь отобразить все данные, которые у меня есть в моем CatPerm, в моей конечной точке API категории.Мои данные CatPerm состоят из «кошка», «разрешение» и «описание», где они представляют собой имя категории, разрешение и описание соответственно
Всякий раз, когда я пытаюсь забрать:
cat = serializers.SlugRelatedField(slug_field='name', read_only=True)
permission = serializers.SlugRelatedField(slug_field='name', read_only=True)
отCatPermSerializer, у меня будет AttributeError: Got AttributeError при попытке получить значение для поля cat
в сериализаторе CatPermSerializer
.Поле сериализатора может иметь неправильное имя и не соответствовать ни одному атрибуту или ключу в экземпляре Permission
.Исходный текст исключения был: объект «Разрешение» не имеет атрибута «cat».
Текущий вид конечной точки API «Категория»:
{
"name": "Travel",
"permission": [
{
"description": "Camera is used to take photos"
}
]
},
Этомой желаемый вид конечной точки API «Категория»:
{
"name": "Travel",
"permission": [
{
"cat": "Travel",
"permission": "Internet",
"description": "This is a description inside CatPerm"
}
]
},
models.py
class CatPerm(models.Model):
cat = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='permissions')
permission = models.ForeignKey(Permission, on_delete=models.CASCADE)
description = models.TextField()
class Category(models.Model):
name = models.CharField(max_length=50)
permission = models.ManyToManyField(Permission,
related_name='category_permissions',
through='CatPerm'
)
class Permission(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
platform = models.CharField(
max_length=10,
choices=PLATFORM_CHOICES,
default=BOTH,
)
classification = models.CharField(
max_length=10,
choices=CLASSIFICATION_CHOICES,
default=LOW,
)
serializer.py
class CatPermSerializer(serializers.ModelSerializer):
cat = serializers.SlugRelatedField(slug_field='name', read_only=True)
permission = serializers.SlugRelatedField(slug_field='name', read_only=True)
class Meta:
model = CatPerm
fields = ("cat", "permission", "description")
class CategorySerializer(serializers.ModelSerializer):
permission = CatPermSerializer(many=True, read_only=True)
class Meta:
model = Category
fields = ("name", "permission")