【发布时间】:2018-02-17 02:19:36
【问题描述】:
为什么 'UUID' 出现在 'profile' 键的值前面,如何正确删除?
名册/序列化器.py
class ShiftSerializer(serializers.ModelSerializer):
class Meta:
model = Shift
fields = ('id', 'profile', 'location', 'date', 'start_time', 'end_time')
profile/models.py
class Profile(models.Models):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=True)
名册/models.py
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=True)
profile = models.ForeignKey('profiles.Profile', null=True, blank=True)
python manage.py shell
from roster.models import Shift
from roster.serializers import ShiftSerializer
myshift = Shift.objects.first()
serializer = ShiftSerializer(myshift)
serializer.data
输出:
{'id': '92ca258e-8624-434a-b61d-e1cd3b80e0e8', 'profile': UUID('0081b028-0a11-47fb-971e-c47177ed93be')
【问题讨论】:
-
为什么要删除它?它将被 json 渲染器正确渲染。
-
你说的完全正确!谢谢!
-
你的问题很有道理@meowmeow。因为我们对序列化器输出的期望是本机类型。
UUID不是本机类型。当我使用 DRF:self.assertDictEqual(posted_data, produced_data)编写测试检查我在端点上发布的内容是否产生正确的 json 时,这也会给我带来一个问题。因为它会将字符串中的 UUID 与 UUID() 对象进行比较。
标签: django django-rest-framework django-serializer