2017-06-30 6 views
1
Iterable ist

ich weiß nicht, warum ich diesen Fehler bin immer ..Django 'User' Objekt nicht

[ 'User' Objekt ist nicht iterable]

hier möchte ich Drucken (angemeldete Benutzer) Follower auf der Startseite. Abgesehen vom Fehler ist mein models.py richtig? für Anhänger und folgenden Mechanismus.

Modell

class Follow(models.Model): 
    following = models.ForeignKey('auth.User', related_name='following') 
    followers = models.ForeignKey('auth.User', related_name='followers') 

Ansicht

def profile(request): 
    current_user = request.user 
    twi = Follow.objects.get(pk=current_user.id) 
    display = twi.followers 
    return render(request,'home.html' , 
     {'detail':display,'user':current_user,}) 

Vorlage

{% for o in detail %} 
<h1>o.followers</h1> 
{% endfor %} 
+1

Warum * sind * Versuchen Sie, über sie zu wiederholen? –

+0

Benutzer ist nur request.user keine Liste – gout

Antwort

4

Sie eine mixup in Ihrer Logik haben, Ihre detail bezieht sich auf followers, aber das Feld selbst ist eine Verknüpfung zu einem einzelnen Benutzer. Sie müssen dieses Feld entweder zu einer ManyToMany-Beziehung machen oder eine umgekehrte Suche verwenden, um herauszufinden, was ein Benutzer verfolgt.

(Theres auch ein Streu Komma in Ihrem Kontext dict, die später zu Problemen führen kann ..

0

wenn Sie wollen 'Detail' iterieren und wollen nicht den Code in den Vorlagen ändern, verwenden a filter() Abfrage und setzen 'display' to result of your filter query.

oder wenn Sie planen, nicht Ihre Ansichten Code zu ändern, können Sie die Vorlage Code aus

{% for o in detail %} <h1>o.followers</h1> {% endfor %} bearbeiten

nur

<h1>{{detail}}</h1>

+0

Wenn Sie eine Erklärung wie andere hinzufügen, dann wäre es toll. –

2

get eine einzige queryset zurück und Sie können darüber nicht wiederholen, wenn Sie diese

Verwendung bekommen verwenden in Vorlage

<h1>{{ detail.followers }}</h1> 

oder wenn Sie mehr

im Hinblick

twi = Follow.objects.filter(pk=current_user.id) 

und diese Zeile ändern

display = twi.followers 

zu

display = twi 

und in Vorlage

{% for o in detail %} 
    <h1>{{ o.followers }}</h1> 
{% endfor %} 
+1

get gibt kein Abfrageset zurück, sondern gibt eine einzelne Instanz der Modellklasse zurück. '.filter' gibt ein Abfrage-Set zurück, '.get' ist wie' '.filter() [0] 'außer es schlägt auch fehl, wenn die Länge des Filterergebnisses größer als 1 ist –

Verwandte Themen