【问题标题】:Django 1.6 getting fk objectsDjango 1.6 获取 fk 对象
【发布时间】:2014-06-29 23:19:35
【问题描述】:

我有这个模型

class Project(models.Model):
    name = models.CharField(max_length=20)
    description = models.CharField(max_length=200, null=True, blank=True)
    creation_date = models.DateTimeField(auto_now_add=True, auto_now=False)
    group_owner = models.ForeignKey(User)

    def __str__(self, y):
        return smart_str(self.name)

class Note(models.Model):
    title = models.CharField(max_length=50, null=True, blank=True)
    content = models.CharField(max_length=1000)
    creation_date = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated_date = models.DateTimeField(auto_now_add=False, auto_now=True)
    projectId = models.ForeignKey(Project, on_delete=models.CASCADE)
    userid = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return smart_str(self.title)

我想在一个视图中加入它们,当有人输入此 URL http://localhost.com:8000/project/ID 时会显示该视图。 显然 ID 将取决于 Project.id,它必须获取与其相关的所有 Notes。

同时我的views.py看起来像这样

class ProjectDetail(generic.DetailView):
    model = Project
    template_name = 'scribere/project/detail.html'

    def get_queryset(self):
        return Project.objects.filter(group_owner__exact=self.request.user.id)

class ProjectNoteList(generic.ListView):
    context_object_name = 'project_note_list'
    template_name = 'scribere/note/index.html'

    def get_queryset(self):
        return Note.objects.filter(userid__exact=self.request.user.id, projectId__exact=self.kwargs['pk'])

和模板

{% extends "base/adminsNavBar.html" %}
{% load i18n %}

{% block head_title %}{% trans 'Projects Details' %}{% endblock %}

{% block breadcrumbs %}
<div class="breadcrumb"><p>{% trans 'Project Details' %}</p></div>
{% endblock %}

{% block content %}
<div class='row'>
    <a href="{% url 'scribere:project_list' %}" class="btn btn btn-primary pull-right" role="button">{% trans 'Back' %}</a>
    <a href="{% url 'scribere:project_note_list' project.id %}" class="btn btn btn-primary pull-right" role="button">{% trans 'Notes' %}</a>
</div>
<div>
{{project.name}}
</div>
<div class = "note-list">
     <ul>
        {% for note in project_note_list %}
            <li>
                <a href= "#"> {{note}} </a>
            </li>
        {% endfor %}
    </ul>
</div>
{% endblock %}

它不会加载有关笔记的任何信息。我错过了什么?

【问题讨论】:

    标签: python django join models mixing


    【解决方案1】:

    除非你用一些信息填充project_note_list,否则没有什么可以迭代。

    凭借ForeignKeys 和Many to one relationproject 对象将有一组与之关联的注释,而无需查找它们。

    您应该能够使用project.note_set.all() 或在您的模板中使用以下方法查询它们:

    {% for note in project.note_set %}
    

    【讨论】:

    • 应该是project.note__set 而不是project.note_set
    • 我必须在某处声明 project.note__set 吗?
    • @user3399059 没有?当然不是?您是否也阅读了我链接的文档?多对一关系是 Django 框架中一个相对标准且处理良好的方面。
    • @LegoStormtroopr 抱歉,我在发表评论后阅读了它,但它不起作用......我想问的是我正在尝试从项目详细信息中查看它,而不是注意,因为从父 obj 中寻找他没有相反的所有孩子 obj
    猜你喜欢
    • 1970-01-01
    • 2016-09-14
    • 2020-10-31
    • 2014-08-10
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多