DRF:可在序列化器选择字段“选择”中调用

Liz*_*Liz 5 django django-rest-framework

我有一个带有“所有者”字段的管理员序列化程序。我希望当前用户填充此字段的选择,但是在运行迁移时,我遇到TypeError,这表明drf不支持序列化器选择字段的可调用对象。django支持模型选择字段的可调用对象,但显然用户会随时间变化,因此我希望在序列化程序实例化时填充此字段。有人可以在这里建议可行的解决方案吗?

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
Run Code Online (Sandbox Code Playgroud)

Liz*_*Liz 1

我发现这里的解决方案是重构并使用 DRF 的 PrimaryKeyRelatedField 序列化器字段(PrimaryKeyRelatedField 可用于使用其主键表示关系的目标。): https: //www.django-rest-framework.org/api -指南/关系/#primarykeylatedfield