Django DRF:可在序列化程序choicefield中调用;“选择”;
我有一个带有“所有者”字段的管理序列化程序。我希望当前用户填充此字段的选项,但当涉及到运行迁移时,我得到一个TypeError,这表明drf不支持序列化程序选项字段的可调用项。django支持model choices字段的可调用项,但显然用户会随时间而变化,因此我希望在序列化程序实例化时填充此字段。有人能提出一个可行的解决方案吗Django DRF:可在序列化程序choicefield中调用;“选择”;,django,django-rest-framework,Django,Django Rest Framework,我有一个带有“所有者”字段的管理序列化程序。我希望当前用户填充此字段的选项,但当涉及到运行迁移时,我得到一个TypeError,这表明drf不支持序列化程序选项字段的可调用项。django支持model choices字段的可调用项,但显然用户会随时间而变化,因此我希望在序列化程序实例化时填充此字段。有人能提出一个可行的解决方案吗 def get_available_users(): return [(u.id, u.username) for u in User.objects.all
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
让您的迁移正常运行 加 然后 或
def get_available_users():
try:
_users = [(u.id, u.username) for u in User.objects.all()]
except:
_users = list(tuple())
return _users
请执行以下操作:
User_detail = [(u.id, u.username) for u in User.objects.all()]
class AdminCreateSerializer(CreateSerializer, AdminSerializer):
owner = serializers.ChoiceField(choices=User_detail)
我发现这里的解决方案是重构并使用DRF的PrimaryKeyRelatedField序列化器字段(PrimaryKeyRelatedField可能用于使用其主键表示关系的目标。):只是澄清一下,您无法运行测试的问题,或者无法整体运行应用程序?注意:更新的问题与用例略有不同(但适用相同的问题),因此Will的评论不再相关这是我试图避免的-运行迁移时,它会抱怨auth_用户表没有退出(因为它没有退出!)示例中出现的错误是因为您没有调用函数,而是为函数本身设置了选项。您不能直接调用函数,因为在迁移新数据库时,“所有者”字段会抛出错误,因为auth_user表尚不存在。在django模型中,您可以将选项设置为callable,但我要说明的是,上面的方法不起作用,并且要求提供任何替代方法。本文说明了这一点。基本上,这似乎不适用于drf choicefield,因此正在寻找任何建议。很抱歉,我一直在编辑,已经很晚了,而且我一直在出错
def get_available_users():
try:
_users = [(u.id, u.username) for u in User.objects.all()]
except:
_users = list(tuple())
return _users
User_detail = [(u.id, u.username) for u in User.objects.all()]
class AdminCreateSerializer(CreateSerializer, AdminSerializer):
owner = serializers.ChoiceField(choices=User_detail)