Django DRF:可在序列化程序choicefield中调用;“选择”;

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

我有一个带有“所有者”字段的管理序列化程序。我希望当前用户填充此字段的选项,但当涉及到运行迁移时,我得到一个TypeError,这表明drf不支持序列化程序选项字段的可调用项。django支持model choices字段的可调用项,但显然用户会随时间而变化,因此我希望在序列化程序实例化时填充此字段。有人能提出一个可行的解决方案吗

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)