0

更新

我尝试使用CuserMiddleware并像这样使用它来获取当前用户:

 def limit_by_username():
     c_username = ""
     c_user = CuserMiddleware.get_user()
     if c_user is not None:
         c_username = c_user[0].username
     return {'reviewer__user__username__exact':c_username}

 r_list_of_reviews = models.ForeignKey('Review', blank=True, null=True, limit_choices_to=limit_by_username())    

但是,评论列表尚未显示再次,非常感谢任何想法。

结束更新

我正在使用/扩展 django 管理站点。我在限制和显示与特定评论者相关的所有评论时遇到问题。我使用了 django_tools 的limit_choices_toThreadLocal.get_current_user(),但它不起作用,并且不显示特定审阅者的审阅对象。以下是我的模型:

class Reviewer(models.Model):
    id = models.AutoField(primary_key=True)
    r_user = models.OneToOneField(User)
    r_list_of_reviews = models.ForeignKey('Review', blank=True, null=True, limit_choices_to={'reviewer__r_user__username__exact': ThreadLocal.get_current_user()})

class Review(models.Model):
    USER_RATING = (
            (1, '1'),
            (2, '2'),
            (3, '3'),
            (4, '4'),
            (5, '5'),
    )
    id = models.AutoField(primary_key=True)
    reviewer = models.ForeignKey('Reviewer')
    review_rating = models.IntegerField(choices=USER_RATING, default=0)

关于如何正确执行此操作的任何想法?提前致谢!

4

1 回答 1

0

你可能有错别字limit_by_username()。查找键可能应该说'reviewer__r_user__username__exact',并且c_user[0]应该只是c_user因为根据中间件实现它不能是任何类似列表的东西。

顺便说一句,您可以通过连接到ModelAdmin.get_form(). 该方法可以访问请求,因此可以访问当前用户。CuserMiddleware那将是我的选择,而且与线程本地人(这是使用的)相比,这也是更多的 Django 方式。

于 2015-07-26T02:28:59.583 回答