2017-12-05 3 views
0

두 개의 다른 쿼리 세트가 html 템플릿에 전달되는 장고 템플릿이 있습니다. 쿼리 세트의 각 항목을 통해 내용을 표시하고 싶습니다. 그런 다음 iniital 루프에있는 동안 두 번째 배열을 탐색하고 정보의 두 부분이 일치하는지 확인합니다. 정보의 두 peices 사이에 일치하는 경우, 나는 단지 정보를 일치에서 첫 번째 결과를 잡아 싶습니다.DJango에서 객체 배열의 첫 번째 항목 잡기 템플릿

그룹 항목 목록을 가져 오는 쿼리가 있습니다. 활동 목록을 가져 오는 다른 쿼리가 있습니다. 그룹과 관련된 모든 활동 객체를 외래 키로 가져오고 활동 객체 내의 그룹을 참조하려고합니다. 그룹의 관련 활동 목록에서 첫 번째 레코드를 grap하고 해당 레코드 만 표시하려고합니다 ... 그룹 (a)에 그룹과 관련된 10 가지 활동이있는 경우 첫 번째 레코드를 가져 와서 표시하고 싶습니다.

의 HTML tempalte : .. 여기 내 코드입니다

<div class="col-12 info-div"> 
     {% for group in groups %} 
     <div class="row"> 
      <p class="col-12"> 
      <a href="{% url 'group_home' group.group.name|slugify group.group.id %}">{{ group.group.name }}</a> 
      </p> 
      {% for act in activities %} 
      {% if act.group.id == group.id %} 
      <p class="col-12"> 
       {{ act.description | first }} 
      </p> 
      {% endif %} 
      {% endfor %} 
     </div> 
     {% endfor %} 
    </div> 

의 첫 번째 항목 인 내가 원하는에 비해 나에게 각 관련 활동의 첫 글자를주는 바로 위의 HTML 어디에 활동 그룹 반복되는 그룹과 일치합니다.

views.py 파일 :

# grab all of the groups you are a member of 
groups = Member.objects.filter(user = user).all() 
# the following will be the last activity created for each group 
activities = GroupActivity.objects.all() 

models.py

class Group(models.Model): 
    name = models.CharField(max_length = 25) 
    description = models.CharField(max_length = 250, null=True) 
    created_by = models.ForeignKey(User, default=1, on_delete=models.CASCADE) 
    created = models.DateTimeField(auto_now_add=True) 
class GroupActivity(models.Model): 
    user = models.ForeignKey(User, on_delete=models.CASCADE) 
    group = models.ForeignKey(Group, on_delete=models.CASCADE) 
    expense = models.ForeignKey(Expense, null=True, on_delete=models.CASCADE) 
    bundle = models.ForeignKey(Bundle, on_delete=models.CASCADE, null=True) 
    description = models.CharField(max_length=200, default='some action') 
    host = models.CharField(max_length=100, null=True) 
    reference = models.IntegerField(default=0) 
    category = models.SmallIntegerField(default = 1) 
    # 1 - general 
    # 2 - specific 
    # 3 - no validation 
    # 4 - validation 
    created = models.DateTimeField(auto_now_add=True) 
+0

템플릿을 사용해야합니까? 더 많은 파이썬 기능이 내장 된 뷰에서이를 비교할 수 있습니다. – Magnus

답변

0

더 나은 답 : 우리가 단순하게, 템플릿에 최선을 다하고 있습니다 여기에

{% for group in groups %} 
    <div class="row"> 
     <p class="col-12"> 
     <a href="{% url 'group_home' group.group.name|slugify group.group.id %}">{{ group.group.name }}</a> 
     </p> 
     {% with group.groupactivity_set.all|first as act %} 
     {% if act %} 
     <p class="col-12"> 
      {{ act.description }} 
     </p> 
     {% endif %} 
     {% endwith %} 
    </div> 
    {% endfor %} 

.

+0

은 단일 객체 또는 객체 목록을 반환합니다. 왜냐하면 내가 5 개의 그룹을 가지고 있다면 나는 5 개의 그룹과 5 개의 첫번째 acitivty 아이템을 원하기 때문이다. –

+0

각 그룹의 첫 번째 개체 인 활동 개체 목록을 반환합니다. 그룹 개체를 원한다면 목록 내 용에 포함하십시오. – rajkris

+0

답변을 업데이트했습니다. – rajkris

관련 문제