Объект 'GenericRelatedObjectManager' не имеет атрибута 'lang'
Я получаю ошибку 'GenericRelatedObjectManager' object has no attribute 'lang'
когда делаю пост запрос.
В этом запросе и отношениях у меня есть две модели Translation
и Tags
.
class Translation(models.Model):
"""
Model that stores all translations
"""
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE, null=True, blank=True)
object_id = models.CharField(max_length=50, null=True, blank=True)
content_object = GenericForeignKey()
lang = models.CharField(max_length=5)
field = models.CharField(max_length=255, null=True)
translation = models.TextField(blank=True, null=True)
def __unicode__(self):
return u'%s : %s : %s' % (self.content_object, self.lang, self.field)
class Tags(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
DISEASE = 0
TYPE = [(DISEASE, 'disease')]
type = models.PositiveSmallIntegerField(choices=TYPE)
name = GenericRelation(Translation)
description = GenericRelation(Translation)
Я создаю миксин сериализатора для отправки одних и тех же данных в разные сериализаторы (не только в Tag, описанный ниже):
SerializerTranslationField и TagSerialzer:
TranslationSerialzer:
class TranslationSerializer(serializers.ModelSerializer):
class Meta:
model = Translation
fields = [
"id",
"object_id",
"lang",
"translation",
"field",
"content_type"
]
def to_representation(self, value):
"""
Display translatios as:
{"en_ire":"All lured!"}
"""
list_of_dicts = {value.lang : value.translation}
return list_of_dicts
def to_internal_value(self, data):
return data
Конечные точки GET и PUT работают нормально, как показано ниже:
{
"id": "b705fc65-6710-4218-9e38-9216f2f33197",
"type": 0,
"name": {
"en": "What a good day!",
"pt": "Que dia maravilhoso!"
},
"description": {
"pt_br": "Bom dia",
"en": "Good morning",
"es": "Buenos dias"
}
},
{
"id": "c9d4443f-82f8-40f2-9f29-b46f320b12eb",
"type": 0,
"name": {
"en": "hello",
"es": "ola",
"pt": "oi"
},
"description": {
"pt_br": "Bom dia",
"en": "Good morning",
"es": "Buenos dias"
}
},
. . .
Однако, когда я делаю пост, я получаю ошибку, упомянутую в заголовке, НО если я обновляю страницу, пост появляется как обычно.
Тем не менее, я могу написать только если many=False
, потому что я не могу передать данные в many=True
, так как он не принимает словарь с другими объектами, только список объектов для name
и description
.
Ошибка, которую я получаю при попытке передать many=True
:
{
"name": {
"non_field_errors": [
"Expected a list of items but got type \"dict\"."
]
},
"description": {
"non_field_errors": [
"Expected a list of items but got type \"dict\"."
]
}
}
Моя нагрузка на пост:
{
"type": 0,
"name": {
"en": "hello",
"es": "ola",
"pt": "oi"
},
"description":{
"pt_br": "Bom dia",
"en": "Good morning",
"es": "Buenos dias"
}
}
Ожидается вход для many=True
на TranslationSerializer:
{
"type": null,
"name": [],
"description": []
}
Ожидается ввод many=False
на TranslationSerializer, Где я могу сделать пост и получить 'GenericRelatedObjectManager':
{
"type": null,
"name": {
"object_id": "",
"lang": "",
"translation": "",
"field": "",
"content_type": null
},
"description": {
"object_id": "",
"lang": "",
"translation": "",
"field": "",
"content_type": null
}
}