2015-07-23 2 views
0

UPDATEДжанго 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())  

Но тем не менее, список отзывов еще не представлен Опять же, любые идеи приветствуются.

END UPDATE

Я использую/расширения сайта Джанго Admin. У меня возникла проблема с ограничением и отображением всех отзывов, связанных с конкретным рецензентом. Я использовал limit_choices_to и ThreadLocal.get_current_user() from 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) 

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

ответ

0

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

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

+0

спасибо, что пожелаете. Я попробую это и дам вам отзыв – jaysonpryde