【问题标题】:How to make a complex query in Django?如何在 Django 中进行复杂查询?
【发布时间】:2022-01-06 05:22:34
【问题描述】:

大家好!

Django 中的新手,很困惑,感谢帮助!我正在尝试创建一个表,例如:

Organization Appeal Form Amount of appeals in this form
Organization 1 In written form 1
Organization 2 In oral form 1

拥有三个模型:

class Organization(models.Model):
    organization_name = models.CharField(max_length=50)


class AppealForm(models.Model):
    form_name = models.CharField(max_length=50)


class Appeal(models.Model):
    organization = models.ForeignKey(Organization, on_delete=models.CASCADE)
    appeal_form = models.ForeignKey(AppealForm, on_delete=models.CASCADE)
    applicant_name = models.CharField(max_length=150)

组织模型的对象:

organization_name
Organization 1
Organization 2

AppealForm模型的对象:

form_name
In written form
In oral form

上诉模型的对象:

organization appeal_form applicant_name
Organization 1 In written form Mary Elizabeth Smith
Organization 2 In oral form Ada María Guerrero

如何进行复杂查询,从 Appeal 模型中检索信息?并放置到上表的确切字段?:(

############################################## ############################

index.html 中的新表

Organization Total amount of appeals Amount of written form appeals Amount of oral form appeals
Organization 1 10 1 9
Organization 2 5 4 1

【问题讨论】:

  • 我想用刚刚渲染的 Appeal 模型填充模板中的表(上面的第一个表),并且需要对此进行查询,以便我可以检索 Appeal 模型的对象并将其放置在 标签...

标签: python-3.x django django-models django-views django-templates


【解决方案1】:

我创建了一个页面应用程序。看看模板在哪里。

views.py

from django.shortcuts import render
from .models import Appeal
from django.db.models import Count


def index(request):
    qs = Appeal.objects.values(
        "organization__organization_name", "appeal_form__form_name"
    ).annotate(total=Count("appeal_form__form_name"))
    context = {
        "appeal": qs,
    }
    return render(request, "pages/index.html", context)

index.html

<table>
    <tr>
        <th>Organization</th>
        <th>Appeal Form</th>
        <th>Amount of appeals in this form</th>
    </tr>
{% for item in appeal %}
<tr>
    <td>{{ item.organization__organization_name }}</td>
    <td>{{ item.appeal_form__form_name }}</td>
    <td>{{ item.total }}</td>
</tr>
{% endfor %}
</table>
pages
├── __init__.py
├── admin.py
├── apps.py
├── migrations
├── models.py
├── templates
│   └── pages
│       └── index.html
├── tests.py
├── urls.py
└── views.py

【讨论】:

  • 非常感谢 Arash,祝你在新工作中好运!尝试了您的解决方案并且运行良好。现在,这只是我的兴趣:查询会是什么样子?如果 index.html 中的表会有所不同。我在问题中添加了不同的表格(作为 index.html 中的新表格)。
  • 添加了新问题link
  • 感谢您的客气话。我很高兴能帮助你。对于您的新问题,我提供了另一个答案。希望它对您有用,并且您接受我的回答。 @JSCTPP
猜你喜欢
  • 2021-06-08
  • 2011-06-08
  • 2012-10-25
  • 2016-09-22
  • 2015-08-05
  • 2020-01-05
  • 1970-01-01
  • 2015-04-28
相关资源
最近更新 更多