【发布时间】:2015-09-27 04:51:10
【问题描述】:
我正在使用 Django 休息框架 2.3 我有这样的课
class Quiz():
fields..
# A custom manager for result objects
class SavedOnceManager(models.Manager):
def filter(self, *args, **kwargs):
if not 'saved_once' in kwargs:
kwargs['saved_once'] = True
return super(SavedOnceManager, self).filter(*args, **kwargs)
class Result():
saved_once = models.NullBooleanField(default=False, db_index=True,
null=True)
quiz = models.ForeignKey(Quiz, related_name='result_set')
objects = SavedOnceManager()
如您所见,我有一个自定义结果管理器,因此 Result.objects.filter() 只会返回将 save_once 设置为 True 的结果
现在我的序列化器看起来像这样:
class ResultSerializer(serializers.ModelSerializer):
fields...
class QuizSerializer(serializers.ModelSerializer):
results = ResultSerializer(many=True, required=False, source='result_set')
现在,如果我对我的测验进行序列化,它只会返回将 saved_once 设置为 True 的结果。但是对于一个特定的用例,我希望序列化程序返回所有对象。我已经读到我可以通过在(进一步说明部分)中传递queryset 参数http://www.django-rest-framework.org/api-guide/relations/ 来做到这一点。但是当我尝试这个时
results = ResultSerializer(many=True, required=False, source='result_set',
queryset=
Result.objects.filter(
saved_once__in=[True, False]))
我得到TypeError: __init__() got an unexpected keyword argument 'queryset'
并且查看 DRF 的源代码(至少在我的版本中)它不接受查询集参数。
寻找一些指导,看看这是否可能......谢谢!
【问题讨论】:
-
这令人困惑。 QuizSerializer 的“result_set”仍应包含所有结果,因为未在相关对象上调用 filter()。您可以从您的视图代码中添加查询吗?
标签: python django django-rest-framework