【问题标题】:Django UUIDField issueDjango UUIDField 问题
【发布时间】:2016-01-27 07:11:18
【问题描述】:

我正在尝试使用以下模型让 UUIDField 在 python django 中工作:

class Ticket(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=50)

但是,当我尝试将模型实例添加到数据库时,它会返回以下错误: /tickets/ 处的类型错误 强制转换为 Unicode:需要字符串或缓冲区,找到 UUID

UUIDField 的文档很短,对我没有帮助。

编辑:我确实导入了 uuid,这是完整的回溯: 环境:

Request Method: GET
Request URL: http://127.0.0.1:8000/tickets/

Django Version: 1.8.5
Python Version: 2.7.9
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'events',
 'rest_framework')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'django.middleware.security.SecurityMiddleware')


Traceback:
File "/Users/daviddejong/.virtualenvs/restDemo/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  132.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/daviddejong/.virtualenvs/restDemo/lib/python2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view
  58.         return view_func(*args, **kwargs)
File "/Users/daviddejong/.virtualenvs/restDemo/lib/python2.7/site-packages/rest_framework/viewsets.py" in view
  87.             return self.dispatch(request, *args, **kwargs)
File "/Users/daviddejong/.virtualenvs/restDemo/lib/python2.7/site-packages/rest_framework/views.py" in dispatch
  466.             response = self.handle_exception(exc)
File "/Users/daviddejong/.virtualenvs/restDemo/lib/python2.7/site-packages/rest_framework/views.py" in dispatch
  463.             response = handler(request, *args, **kwargs)
File "/Users/daviddejong/.virtualenvs/restDemo/lib/python2.7/site-packages/rest_framework/mixins.py" in list
  48.         return Response(serializer.data)
File "/Users/daviddejong/.virtualenvs/restDemo/lib/python2.7/site-packages/rest_framework/serializers.py" in data
  663.         ret = super(ListSerializer, self).data
File "/Users/daviddejong/.virtualenvs/restDemo/lib/python2.7/site-packages/rest_framework/serializers.py" in data
  228.                 self._data = self.to_representation(self.instance)
File "/Users/daviddejong/.virtualenvs/restDemo/lib/python2.7/site-packages/rest_framework/serializers.py" in to_representation
  603.             self.child.to_representation(item) for item in iterable
File "/Users/daviddejong/.virtualenvs/restDemo/lib/python2.7/site-packages/rest_framework/serializers.py" in to_representation
  461.                 ret[field.field_name] = field.to_representation(attribute)
File "/Users/daviddejong/.virtualenvs/restDemo/lib/python2.7/site-packages/rest_framework/relations.py" in to_representation
  356.         name = self.get_name(value)
File "/Users/daviddejong/.virtualenvs/restDemo/lib/python2.7/site-packages/rest_framework/relations.py" in get_name
  276.         return six.text_type(obj)

Exception Type: TypeError at /tickets/
Exception Value: coercing to Unicode: need string or buffer, UUID found

编辑 2:我的序列化程序如下所示:

class TicketSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Ticket
        fields = ('url', 'id', 'name')

编辑 3:

我发现了错误。我在我的模型中犯了一个错误。我的 unicode 看起来像这样:

def __unicode__(self):
    return self.id

当然这是行不通的。

【问题讨论】:

  • 请发布完整的回溯。
  • 您在项目中添加了“import uuid”?请添加整个回溯。
  • 您的 Django REST 框架序列化程序可能存在问题。您的 ID 使用 serializers.UUIDField() 吗?
  • 我添加了我的序列化程序
  • @icam0 考虑添加您的分辨率作为答案并接受它以解决此问题。

标签: python django uuid


【解决方案1】:

也许你应该使用这样的东西:

def __unicode__(self):
    return str(self.id)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-20
    • 2012-02-05
    • 2017-09-21
    • 2019-01-28
    • 2020-05-29
    • 2017-01-23
    • 1970-01-01
    • 2017-02-05
    相关资源
    最近更新 更多