0

Ich versuche, die Optionen in meinem wählen selected. In meinem Code gibt jeder Benutzer Noten für einander. Ich habe ein paar Dinge versucht, aber es funktioniert nicht. Die Option sollte ausgewählt bleiben, wenn der ausgewählte Wert der Bewertung entspricht, die dem Benutzer zugewiesen wurde. Ich habe AbstractUser verwendet, deshalb gibt es User = get_user_model(), aber ich entschied mich, es nicht zu zeigen, da es nutzlos war.Django, kann keine Optionen ausgewählt

models.py

class Score(models.Model): 
    VALUE = (
     (1, "Score 1"), 
     (2, "Score 2"), 
     (3, "Score 3"), 
     (4, "Score 4"), 
     (5, "Score 5"), 
     (6, "Score 6"), 
     (7, "Score 7"), 
     (8, "Score 8"), 
     (9, "Score 9"), 
     (10, "Score 10"), 
    ) 
    granted_by = models.ForeignKey(settings.AUTH_USER_MODEL, default=0) 
    granted_to = models.ForeignKey(settings.AUTH_USER_MODEL, default=0, related_name='granted_to') 
    grade = models.PositiveSmallIntegerField(default=0, choices=VALUE) 

    def __str__(self): 
     return str(self.granted_to) 

views.py

@login_required(login_url='/login/') 
def vote(request): 
    User = get_user_model() 
    data = dict() 
    data['users'] = User.objects.exclude(username=request.user) 
    if request.method == "POST": 
     if "rating" in request.POST: 
      for key in request.POST: 
       if 'grade_' in key: 
        awarded_grade = Score.objects.filter(granted_by=request.user, 
                 granted_to__id=key.split('_')[1]).first() 
        if awarded_grade: 
         awarded_grade.grade = request.POST.get(key) 
         awarded_grade.save() 
        else: 
         Score.objects.create(granted_by=request.user, 
               granted_to_id=key.split('_')[1], 
               grade=request.POST.get(key)) 
    data['values'] = Score.VALUE 
    data['grade'] = Score.objects.filter(granted_by=request.user) 
    return render(request, 'vote.html', data) 

vote.html

{% for user in users %} 
    <tr> 
     <td>{{ user.date_joined|date:"d.m.Y H:i" }}</td> 
     <td>{{ user.username }} </td> 
     <td>{{ user.id }}</td> 
     <td> 
      <select title="selecting_grade" name="grade_{{ user.id }}"> 
       {% for value in values %} 
        <option value="{{ value.0 }}" {% for a in grades %} {% if a.grade == value.0 %}selected{% endif %} {% endfor %} >{{ value.0 }}</option> 
       {% endfor %} 
      </select> 
     </td> 
    </tr> 
{% endfor %} 

ich so etwas wie tryed haben dies in der Konsole:

user_grade = Score.objects.filter(granted_by__username='Stalone', granted_to__username='Fane') 
user_grade 
<QuerySet [<Score: Fane>]> 

for x in granted_user: 
    print(x.grade) 

2 

oder:

a = CustomUser.objects.all() 
for user in a: 
    grades = user.granted_to.values() 
    print(grades) 
<QuerySet [{'id': 22, 'grade': 5, 'granted_to_id': 14, 'granted_by_id': 1}]> 
<QuerySet [{'id': 21, 'grade': 5, 'granted_to_id': 15, 'granted_by_id': 1}]> 
<QuerySet [{'id': 19, 'grade': 5, 'granted_to_id': 16, 'granted_by_id': 1}]> 
<QuerySet [{'id': 23, 'grade': 7, 'granted_to_id': 17, 'granted_by_id': 1}]> 
<QuerySet [{'id': 20, 'grade': 8, 'granted_to_id': 18, 'granted_by_id': 1}]> 
<QuerySet [{'id': 24, 'grade': 7, 'granted_to_id': 19, 'granted_by_id': 1}]> 

Um zu sehen, ob ich die Partitur zu jedem Benutzer gegeben bekommen und sie in ausgewählten, ich habe sie, aber ich habe es nicht geschafft zu mit ihnen arbeiten, irgendwelche Vorschläge?

Antwort

1

In views.py Sie vorbei grade

data['grade'] = Score.objects.filter(granted_by=request.user) 

Aber in vote.html Sie iterieren mit grades

<option value="{{ value.0 }}" {% for a in grades %} {% if a.grade == value.0 %}selected{% endif %} {% endfor %} >{{ value.0 }}</option> 

Entweder ändern grade als grades in views.py oder grades als grade ändern in vote.html

+0

ok das ist eine Sache, aber jetzt für alle Benutzer erscheint Grad 3 als ausgewählt, auch wenn ich es nur einem Benutzer gab, siehe hier http://imgur.com/a/LYyoQ, bis Sie die Note id - grade | sehen können Note id - grade –

+0

Sie müssen die if-Bedingung '{% if a.grade == value.0%}' mit diesem '{% if user.id == a.granted_to.id und a.grade == Wert ersetzen .0%} ' –

+0

oh mein Gott, ich denke, es hat funktioniert –

Verwandte Themen