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?
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 –
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%} ' –
oh mein Gott, ich denke, es hat funktioniert –