我有一个带有enum列的模型,例如
# Using Django 2.2 (does not support Enums natively)
from django_enum_choices.fields import EnumChoiceField
class Service(Enum)
MOBILE: "MOBILE"
LAPTOP: "LAPTOP"
class Device(models.Model):
service = EnumChoiceField(Service)
...
是否有可能获得查询结果与枚举列是枚举的值?
例如:如果我这样做:
query = Device.objects.values("service")
print(query)
我得到:<QuerySet [{'service': <Service.MOBILE: 'MOBILE'>}, {'service': <Service.MOBILE: 'MOBILE'>}, {'service': <Service.LAPTOP: 'LAPTOP'>}]>
我希望得到:<QuerySet [{'service': 'MOBILE'}, {'service': 'MOBILE'}, {'service': 'LAPTOP'}]>
我得到错误时,我运行:query = Device.objects.values("service__value")
或query = Device.objects.values("service.value")
我想说的是如何通过输入
来获取enum字段的值mobile_service = Service.MOBILE # <Service.MOBILE: "MOBILE">
mobile_service_as_string = mobile_service.value # "MOBILE"
错误:
django.core.exceptions.FieldError: Cannot resolve keyword 'value' into field. Join on 'service' not permitted.
django.core.exceptions.FieldError: Cannot resolve keyword 'service.value' into field. Choices are: service, ..
事实证明,您可以直接使用序列化器!
from django_enum_choices.serializers import EnumChoiceModelSerializerMixin
from rest_framework import serializer
class DeviceSerializer(EnumChoiceModelSerializerMixin, serializers.ModelSerializer):
class Meta:
model = Device
fields = (
"service",
)
结果:
query = Device.objects.values("service").all()
results = DeviceSerializer(query, many=True)
print(results)
# [OrderedDict([('service', 'MOBILE')]), OrderedDict([('service', 'LAPTOP')])]