Объект Django AttributeError не имеет атрибута 'upper'
Я реализую API для приложения для маркировки изображений. Я настроил метод create() для Tagging. Tagging содержит тег, который является объектом, содержащим имя и язык. Чтобы теги было легче сравнивать друг с другом, я должен сохранять все теги в верхнем или нижнем регистре.
serializers.py
def create(self, validated_data):
"""Create and return a new tagging"""
user = None
request = self.context.get("request")
if request and hasattr(request, "user"):
user = request.user
score = 0
tag_data = validated_data.pop('tag', None)
if tag_data:
tag = Tag.objects.get_or_create(**tag_data)[0]
validated_data['tag'] = tag
tagging = Tagging(
user=user,
gameround=validated_data.get("gameround"),
resource=validated_data.get("resource"),
tag=validated_data.get("tag"),
created=datetime.now(),
score=score,
origin=""
)
tagging.save()
return tagging
Я пробовал оба варианта
tag=validated_data.get("tag").upper()
и это:
tag=validated_data.get("tag").lower()
и я получаю AttributeError 'Tag' object has no attribute 'upper' or 'Tag' object has no attribute 'lower'.
Я хочу, чтобы для этого тега в объекте тегирования:
{
"gameround_id": 65,
"resource_id": 11601,
"tag": {
"name": "TagToTestNow",
"language": "de"
}
}
сохранить что-то вроде "TAGTOTESTNOW" или "tagtotestnow", чтобы облегчить сравнение тегов.
Как я могу этого достичь?
Это потому, что вы уже создали тег, поэтому он больше не является диктом. Вы можете сделать tag=tag непосредственно в Tagging создании объекта.
Если вы хотите, чтобы все ваши теги имели одинаковый регистр, вам нужно немного изменить способ создания тега, как показано ниже:
tag = Tag.objects.get_or_create(
language=tag_data['language'],
name=tag_data['name'].upper()
)[0]