2016-05-31 5 views
1

나는 자신을 위해 할 일 목록 응용 프로그램을 작성하고 있으며 장고에 익숙해지기 쉽고 모든 것이 복잡하고 복잡합니다.하나의 템플릿에 다 대다 관계를 모두 표시합니다.

한 번에 하나 이상의 목록에 항목을 표시 할 수 있도록 목록 모델과 항목 모델간에 다 대다 관계를 사용하려고합니다.

models.py

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Home</title> 
</head> 
<body> 
{% if lists %} 
    <table> 
    {% for list in lists %} 
     <!--{{ list }} 
     {{ list.item_set.all }}--> 
     {% for item in list.item_set.all %} 
      <tr> 
       <td>{{ item.field }}</td> 
      </tr> 
      <br> 
     {% endfor %} 
    {% endfor %} 
    </table> 
{% else %} 
    Woops, you don't have any lists. Consider adding one. 
{% endif %} 
</body> 
</html> 

views.py이

from django.http import HttpResponse 
from django.contrib.auth.models import User 
from django.contrib.auth.decorators import login_required 
from .models import List, Item 
from .forms import ItemForm 
from django.shortcuts import render, get_object_or_404 
# Create your views here. 

def getLists(request): 
    lists = List.objects.filter(canView__user__id=request.user.id).values('listName') 
    temp2 = dict() 
    for list in lists: 
     temp = list.get('listName') 
     temp2[temp] = List.objects.get(listName=temp) 
    return temp2 


@login_required 
def index(request): 
    lists = dict() 
    lists = getLists(request) 
    list = lists['MainList'] 
    print(list.item_set.get(pk=1)) 
    print(lists['MainList'].item_set.count()) 
    return render(request, 'index.html', {'lists': lists}) 

그래서 내 문제는 거짓말을 보인다

from django.db import models 
from django.contrib.auth.models import User 
from datetime import datetime 

def makeName(): 
    return datetime.now() 

# Create your models here. 
class List(models.Model): 
    #owner = models.ForeignKey(User, on_delete=models.CASCADE) 
    list_create = models.DateTimeField(auto_now_add=True) 
    canView = models.ManyToManyField(User, blank=True, related_name='user') 
    listName = models.CharField(default=makeName, max_length=100) 


class Item(models.Model): 
    list = models.ManyToManyField(List, blank=True) 
    field = models.TextField(max_length=100) 
    name = models.CharField(max_length=100) 
    date = models.DateTimeField('Date Made', auto_now_add=True) 
    completed = models.DateTimeField() 
    status = models.BooleanField(default=False) 

index.html을 : 여기

는 관련 코드 index.html에 있습니다. 모든 목록의 모든 항목을 한 페이지에 모두 표시하려고합니다. This 반 비슷한 정도의 질문은 근본적으로 말해서 list.item_set.all을 반복하지만, 그렇게 할 때 출력이 나오지 않습니다. 데이터베이스에 항목이 채워져 있고보기에서 콘솔로 인쇄 할 때 예상 한 값이 표시됩니다. 조언이나 안내가 훌륭합니다.

답변

0

getLists 함수는 목록에 목록 이름을 매핑하여 dict를 반환합니다. 따라서 템플릿에서 lists을 반복 할 때 그 dict를 반복합니다. 목록을 반복하면 목록에 키가 제공됩니다.

다 대다 항목에 대해 반복 테스트를 수행하려면 코드를 단순화해야합니다. 해당 getLists 함수를 모두 제거하고 목록을 반환하십시오.

def index(request): 
    lists = List.objects.filter(canView__user__id=request.user.id) 
    return render(request, 'index.html', {'lists': lists}) 
+0

왜 내가 사전을 반복 할 때 그 생각을 멈추지 않는지 전혀 알지 못합니다. 도와 주셔서 감사합니다! – moovlin

관련 문제