django - 按用户运行查询过滤器

时间:2014-07-22 03:32:24

标签: python django

在使用用户ID决定查询集中应返回的内容时,我在尝试以用户身份登录后如何运行查询时遇到问题。在做以下所有我得到的回报是 -

'str' object is not callable

我现在在基本设置上使用夹层,使用可以在UserFile模型上查看某些结果的set帐户进行安装,但不是全部。

从SQL语法我想要做的是以下 -

select * from UserFile where userid = (user that's logged in)

这是我的views.py -

class Vendor_Matrix(mixins.ListModelMixin,
                  mixins.CreateModelMixin,
                  generics.GenericAPIView):
    serializer_class = User_Serializer
    permission_classes = (User, permissions.IsAuthenticated)

    def get(self, request, *args, **kwargs):
        user = request.user
        queryset = UserFile.objects.filter(username=request.user).values_list('vendorid', 'fileid', 'grant_date', 'revoke_date')
        return self.retrieve(request, *args, **kwargs)

我的models.py

class UserFile(models.Model):
    userid = models.ForeignKey(User, db_column='userid')
    fileid = models.ForeignKey(FileIndex, db_column='id')
    grant_date = models.DateTimeField()
    revoke_date = models.DateTimeField()
    class Meta:
        db_table = 'auth_files'
        verbose_name = 'User File Matrix'
        verbose_name_plural = 'User File Matricies'

我通过以下方式调用它 -

urls.py

urlpatterns = patterns('',
    url(r'^your-data/vendor-matrix/$', 'vendor_matrix'),
)

2 个答案:

答案 0 :(得分:1)

根据我的理解,您尝试过滤username=....UserFile模型中没有字段用户名,此外vendorid也丢失了吗?

错误可能是因为Django无法解析'vendorid'字符串,因为没有相应的字段,并且说明此str不可调用。

可能有助于查看完整的堆栈,并且如果仅部分记录模型以获得完整的模型。

答案 1 :(得分:0)

我最终通过专注于将我的视图剥离到骨架并再次构建它来完成工作。这有效 -

def index(request):
    userid = None
    if request.user.is_authenticated():
        userid = request.user.id
    queryset = UserFile.objects.filter(userid=userid).values_list('fileid', 'grant_date', 'revoke_date')
    return JSONResponse(queryset)