Объект 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]
Вернуться на верх