我有一个带有'所有者'字段的管理序列化程序。我希望当前用户填充此字段的选项,但是当涉及到运行迁移时,我得到一个TypeError,表明drf不支持序列化器选择字段的callables。 django支持模型选择字段的callable,但显然用户会随时改变,所以我希望在serializer实例化中填充这个字段。任何人都可以建议一个可行的解决方案吗?
def get_available_users():
return [(u.id, u.username) for u in User.objects.all()]
class AdminCreateSerializer(CreateSerializer, AdminSerializer):
owner = serializers.ChoiceField(choices=get_available_users)
>> TypeError: 'function' object is not iterable
答案 0 :(得分:2)
让您的迁移正常工作
添加
from django.utils.functional import lazy
然后
owner = serializers.ChoiceField(choices=lazy(get_available_users, tuple)())
或
def get_available_users():
try:
_users = [(u.id, u.username) for u in User.objects.all()]
except:
_users = list(tuple())
return _users
答案 1 :(得分:0)
执行以下操作:
User_detail = [(u.id, u.username) for u in User.objects.all()]
class AdminCreateSerializer(CreateSerializer, AdminSerializer):
owner = serializers.ChoiceField(choices=User_detail)
答案 2 :(得分:0)
我发现这里的解决方案是重构和使用DRF的PrimaryKeyRelatedField序列化程序字段(PrimaryKeyRelatedField可以用于使用其主键表示关系的目标。):https://www.django-rest-framework.org/api-guide/relations/#primarykeyrelatedfield