3

Я делаю свой личный веб-сайт, используя Django 1.10Как получить данные от одного до многих отношений в django?

Вот модели навыков приложения:

from __future__ import unicode_literals 

from django.db import models 


# Create your models here. 
class Skill(models.Model): 
    name = models.CharField(max_length=256) 
    created_at = models.DateTimeField(auto_now=False, auto_now_add=True) 
    updated_at = models.DateTimeField(auto_now=True, auto_now_add=False) 

    def __unicode__(self): 
     return self.name 

    def __str__(self): 
     return self.name 


class Subskill(models.Model): 
    skill = models.ForeignKey(Skill, on_delete=models.CASCADE) 
    name = models.CharField(max_length=256) 
    link = models.CharField(max_length=256) 
    created_at = models.DateTimeField(auto_now=False, auto_now_add=True) 
    updated_at = models.DateTimeField(auto_now=True, auto_now_add=False) 

    def __unicode__(self): 
     return self.name 

    def __str__(self): 
     return self.name 

И вид:

from django.shortcuts import render 
from skill.models import Skill,Subskill 


# Create your views here. 
def home(request):   
    skill = Skill.objects.all() 
    subskill =Subskill.objects.all()  
    context = {'skills':skill, 
       'subskills':subskill} 
    return render(request, 'skill.html', context) 

Это мой шаблон страницы:

умение .html

{% block skill %} 
{% for subskill in subskills %} 
{{subskill.skill.name}} 
{{subskill.name}} 
{% endfor %} 
{% endblock skill %} 

Предположим, есть навык, называемый веб-дизайном, который имеет два подкласса под названием html и css. я хочу сделать в вид страниц, как как имя навыка, и это два имени ребенка:

Веб-дизайн

Html

CSS

Но это делает, как, как веб-дизайн сайтов Web дизайн CSS

Пожалуйста, помогите мне в этом вопросе.

ответ

2

Вы можете сделать realted query на самом навыком https://docs.djangoproject.com/en/1.10/topics/db/queries/#backwards-related-objects

# example 
skill_obj = Skill.objects.all()[0] 
subskills = skill_obj.subskill_set.all() 

Или в вашем случае

def home(request):   
    skills = Skill.objects.all().prefetch_related('subskill_set') # optimizing 
    context = {'skills':skills} 
    return render(request, 'skill.html', context) 

В шаблоне

{% for skill in skills %} 
    {{skill.name}} 
    {% for subskill in skill.subskill_set.all %} 
     {{subskill.name}} 
    {% endfor %} 
{% endfor %} 
+0

Это показывает ошибку как подобный объект 'QuerySet' не имеет атрибут 'subskill_set' –

+0

Прочитать обновленный ответ 'skil l = skill.subskil_set.all() 'предназначалось для применения, когда навык - объект, а не набор запросов –

+0

Переформатировать бит {% для умения в навыках%} {{subskill.skill.name}} {% для подкласс в умении. subskill_set.all%} – sr3z

Смежные вопросы