2017-11-28 3 views
0

쿼리 세트의 개체를 필터링하는 데 사용할 장고 템플릿이 있습니다. 나는 새로운 회원을 추가하고 싶은 그룹이있다. 그룹을 만들 때 추가 된 그룹 구성원을 추적하는 데 사용되는 구성원 개체 목록이 있습니다. 친구 이름 목록 옆에 확인란을 표시하여 회원을 추가했습니다. 이제 그룹의 구성원이 아닌 친구 목록을 표시 한 다음 그룹이 선택되면 그룹에 추가하려고합니다. 나는 이미 회원이 아닌 친구들의 목록을 보여주기 위해 만든 html 템플릿 필터링 시스템에 문제가있다. 아무도 나를 알아 채지 못하게 할 수있다. 나는 아래의 모든 코드가 있습니다 : HTML 템플릿두 개의 쿼리 세트가 포함 된 django 템플릿의 필터링 문제 - django

# grab the group members 
members = Member.objects.filter(group = group).all() 
# grab all of the friends fo the logged in user 
friender = Friend.objects.filter(user = user.username).all() 
friended = Friend.objects.filter(friend = user).all() 
friends = friender | friended 
# the required parameters for this form 
parameters = { 
    'friends':friends, 
    'members':members, 
    'group':group, 
    'message':message, 
} 
return render(request, 'groups/add_members.html', parameters) 

을 지금 여기에 있습니다 : : 여기

{% extends "general/header.html" %} 

{% block content %} 
    <h1>Create Group</h1> 
    <p>{{ message }}</p> 
    <form method="POST"> 
     {% csrf_token %} 
     {% for friend in friends %} 
      {% for member in members %} 
      {% if member.user.username != friend.friend.username %} 
       {% if member.user.username != friend.user %} 
       {% if friend.user == user.username %} 
        <p> 
        {{ friend.friend.username }} 
        <input type="checkbox" name="{{friend.friend.username}}" value="{{friend.friend.username}}"> 
        </p> 
       {% endif %} 
       {% if friend.friend == user %} 
        <p> 
        {{ friend.user }} 
        <input type="checkbox" name="{{friend.user}}" value="{{friend.user}}"> 
        </p> 
       {% endif %} 
       {% endif %} 
      {% endif %} 
      {% endfor %} 
     {% endfor %} 
     <input type="submit" name="submit" value="submit"> 
    </form> 

{% endblock %} 

이 존재 친구들과 회원의 목록입니다

여기

는 전달 된 쿼리입니다 지금 여기

logged in user omar 
friends: hani, assad, rana, amer 
members: hani, assad 

가 표시되는 것입니다 :

여기

enter image description here

는 모델입니다 : 그것은 모델없이 디버깅하기가 어렵습니다

# the following are models for accepted friend requests 
class Friend(models.Model): 
    user = models.CharField(max_length=22, default='current user') 
    friend = models.ForeignKey(User, on_delete=models.CASCADE, default=1) 
    created = models.DateTimeField(auto_now_add=True) 

class UserActivity(models.Model): 
    user = models.ForeignKey(User, on_delete=models.CASCADE) 
    account = models.CharField(max_length=150, null=True) 
    expense = models.ForeignKey(Expense, null=True, on_delete=models.CASCADE) 
    request = models.ForeignKey(Request, null=True, on_delete=models.CASCADE) 
    description = models.CharField(max_length=200, default='some action') 
    reference = models.IntegerField(default = '101', null = True) 
    category = models.IntegerField(default=1) 
    status = models.SmallIntegerField(default=1) 
    # 1 = unseen 
    # 2 = seen 
    created = models.DateTimeField(auto_now_add=True) 
# Member stores all of the different members to each of the created groups 
class Member(models.Model): 
    user = models.ForeignKey(User, default=1, on_delete=models.CASCADE) 
    group = models.ForeignKey(Group, default=1 , on_delete=models.CASCADE) 
    status = models.SmallIntegerField(default=1) 
    # 1 = member 
    # 2 - host 
    created = models.DateTimeField(auto_now_add=True) 
+0

모델을 추가하십시오. –

답변

1

,하지만 당신은 다음과 같은 코드를 단순화 할 수 있습니다 :

  1. 는 회원의 목록을 만듭니다

    members = [member.user.username for member in Member.objects.filter(group = group)] 
    
  2. HTML 템플리트를 여기로 변경하십시오. friendmembers 목록에없는 경우 확인하고 True 경우 그 표시 : 이것은 현재 그룹의 구성원이 아닌 사용자 만 표시됩니다

    {% extends "general/header.html" %} 
    {% block content %} 
        <h1>Create Group</h1> 
        <p>{{ message }}</p> 
        <form method="POST"> 
        {% csrf_token %} 
        {% for friend in friends %} 
         {% if friend.friend.username not in members %} 
         <p> 
          {{ friend.friend.username }} 
          <input type="checkbox" name="{{friend.friend.username}}" value="{{ friend.friend.username }}"> 
         </p> 
         {% endif %} 
         {% if friend.user not in members %} 
         <p> 
          {{ friend.user }} 
          <input type="checkbox" name="{{friend.user}}" value="{{ friend.user }}"> 
         </p> 
         {% endif %} 
        {% endfor %} 
        <input type="submit" name="submit" value="submit"> 
        </form> 
    {% endblock %} 
    

.

다른 발언 : 필터 후 .all()를 사용할 필요가

  • 없습니다. 당신은 이미 정의에 의한 것이 아니라 모두 필터링입니다.
  • 가능한 경우 중첩 루프 및 중첩 된 if를 피하십시오. 때로는 피할 수없는 경우도 있습니다.
+0

나는 둥지를 피하려고했지만 어제 해결책을 찾지 못했습니다. 나는 당신의 솔루션을 시도하고 그것이 작동하는지 확인합니다. 그게 효과가있는 것처럼 보입니다. –

+0

감사합니다. ... –

관련 문제