Django AttributeError 对象没有属性 'upper'

Django AttributeError object has no attribute 'upper'

我正在为图像标签应用实现 API。 我已经为标记定制了一个 create() 方法。标记包含一个标记,它是一个包含名称和语言的对象。为了使标签更容易相互比较,我必须以大写或小写形式保存所有标签。

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”之类的内容,以便更轻松地进行标签比较。

我怎样才能做到这一点?

因为你已经创建了标签,所以它不再是字典了。您可以直接在 Tagging 对象创建中执行 tag=tag

如果您希望所有标签都具有相同的大小写,则必须首先稍微修改您创建标签的方式,如下所示:

tag = Tag.objects.get_or_create(
    language=tag_data['language'],
    name=tag_data['name'].upper()
)[0]