Django 1.8: доступ к текущему пользователю (расширенный) в ForeignKey.limit_choices_to

ОБНОВИТЬ

Я попытался использовать 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. У меня проблема с ограничением и отображением всех обзоров, связанных с конкретным рецензентом. Я использовал limit_choices_to и ThreadLocal.get_current_user() из django_tools, но он не работает, и объекты обзора для определенного рецензента не отображаются. Ниже приведены мои модели:

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)

Любые идеи о том, как сделать это правильно? Заранее спасибо!

1 ответ

Вы можете иметь опечатки в limit_by_username(), Ключ поиска, вероятно, должен сказать 'reviewer__r_user__username__exact', а также c_user[0] должно быть просто c_user так как согласно реализации промежуточного программного обеспечения это не может быть чем-то вроде списка.

Кстати, вы можете построить свой выбор для поля, подключив ModelAdmin.get_form(), Этот метод имеет доступ к запросу и, следовательно, к текущему пользователю. Это был бы мой выбор, а также более Django-й путь по сравнению с локальными потоками (вот что CuserMiddleware использует).

Другие вопросы по тегам