2017-07-18 2 views
0

J'ai deux modèles: UserEdus et Question.Queryset dynamique basé sur l'utilisateur actuel

Je dois obtenir tous les Questions ayant pour auteur un UserEdus spécifique.

Models.py

class UserEdus(models.Model): 
user = models.OneToOneField(User, on_delete=models.SET_NULL, null=True) 

class Question(models.Model): 
author = models.ForeignKey(UserEdus, null=False) 

Views.py

class MyQuestionListView(generic.ListView): 
    model = Question 
    paginate_by = 10 
    queryset = Question.objects.filter(author=User.useredus) 
    template_name = 'edus/myquestion_list.html' 

Cette queryset retourne int() argument must be a string, a bytes-like object or a number, not 'ReverseOneToOneDescriptor'

Si je

queryset = User.useredus.question.all() 

qui retourne 'ReverseOneToOneDescriptor' object has no attribute 'question'

Bien que le niveau du modèle, je peux obtenir le bon résultat en utilisant

{% for question in user.useredus.question_set.all %} 
+0

Vous êtes sûr que vous ne voulez pas author = UserEdus à la place? Étant donné le modèle Question, c'est à peu près la seule chose que le champ auteur peut être: il a un FK à UserEdus. – Evert

+0

essayez '(author = request.user)' au lieu de '(author = User.useredus)' – hansTheFranz

+0

@Evert, ce qui retourne la même erreur int() argument hansTheFranz, que la demande de retour n'est pas définie –

Répondre

1

donc vous allez devoir remplacer la méthode get_queryset si vous souhaitez définir dynamiquement le queryset en fonction de l'utilisateur demande . Donc, faites quelque chose comme ceci:

class MyQuestionListView(generic.ListView): 
    model = Question 
    paginate_by = 10 
    template_name = 'edus/myquestion_list.html' 

    def get_queryset(self): 
     return self.request.user.useredus.question_set.all()