0

내 선택에서 옵션을 만들려고합니다. selected. 내 코드에서 각 사용자는 서로에게 점수를 부여합니다. 나는 몇 가지를 시도했지만 작동하지 않습니다. 선택한 값이 사용자에게 주어진 등급과 같을 경우 옵션은 선택된 상태로 유지되어야합니다. 나는 User = get_user_model()이있는 AbstractUser을 사용했지만, 쓸모가 없어 보여주지 않기로 결정했습니다.장고, 옵션을 선택할 수 없습니다.

내가 좋아하는 뭔가를 tryed했습니다

{% 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 %} 

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

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 

나 : 내가 선택한 각 사용자에게 주어진 점수를 얻고에서 사용할 수있는 경우

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}]> 

내가 그들에게있어 보려면,하지만 난에 관리하지 않았다 콘솔에서이 그들과 함께 일해, 어떤 제안? 당신이

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

그러나 vote.html에서 grade을 전달하는 views.py에서

답변

1

, 당신은 grades

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

으로 반복되어 어느 views.pygrades으로 grade을 변경하거나에서 grade으로 grades 변경 vote.html

+0

괜찮 았지만 지금은 한 가지입니다. 모든 사용자에 대해 3 학년이 선택되었음을 나타냅니다. 단 한 명의 사용자에게만 주어졌습니다. http://imgur.com/a/LYyoQ에서 등급을 볼 수 있습니다. 등급 - 등급 | 등급이 –

+0

인 경우 '{% if a.grade == value.0 %}'를이 {{if if user.id == a.granted_to.id and a.grade == value}로 대체해야합니다 .0 %}' –

+0

오, 세상에, 나는 그것이 효과가 있다고 생각한다. –