python - 在 Django 中连接多个表以生成单个报告

标签 python django database sqlite

从下面的示例数据集中,我将如何通过 django.db 或通过数据库 API 查询来获取请求结果?

我想查询数据集以获取 A 中指定日期之前的所有新项目,但我只想要 B 中的名称和颜色以及 C 中的味道。

class A(models.Model):
    export_date = models.DateField()

class B(models.Model):
    name = models.CharField()
    color = models.CharField()
    weight = models.CharField()
    a = models.ForeignKey(A)

class C(models.Model):
    taste = models.CharField()
    smell = models.CharField()
    a = models.ForeignKey(A)

编辑: 我能做到

as = A.objects.all().filter(export_date__gte=date)
b = B.objects.all().filter(a=as)
c = B.objects.all().filter(c=as)

但是我仍然遇到两个单独的查询集,我必须弄清楚如何手动加入。

最佳答案

尝试以下操作:

myapp/models.py
from django.db import models

class A(models.Model):
    export_date = models.DateField()

    def __unicode__(self):
        return "date: {0}".format(self.export_date)

class B(models.Model):
    name = models.CharField(max_length=255)
    color = models.CharField(max_length=255)
    weight = models.CharField(max_length=255)
    a = models.ForeignKey(A)

    def __unicode__(self):
        return "name: {0}, color: {1}, weight: {2}".format(self.name,
                                                           self.color,
                                                           self.weight)

class C(models.Model):
    taste = models.CharField(max_length=255)
    smell = models.CharField(max_length=255)
    a = models.ForeignKey(A)

    def __unicode__(self):
        return "taste: {0}, smell: {1}".format(self.taste, self.smell)

myapp/admin.py
from django.contrib import admin

from .models import *

admin.site.register(A)
admin.site.register(B)
admin.site.register(C)

myapp/tests.py
from myapp.models import A, B, C

A.objects.values('b__color', 'c__taste', 'c__smell')\
         .order_by('id') \
         .distinct()

数据

答:

- date: 2015-06-10
- date: 2015-06-09

B:

- (A: 2015-06-09) name: name 2, color: white, weight: 10 kg
- (A: 2015-06-09) name: name 1, color: black, weight: 1 kg

C:

- (A: 2015-06-09) taste: vanilla, smell: peppermint
- (A: 2015-06-09) taste: pizza, smell: coffee

查询输出

[
    {'b__color': u'black', 'c__taste': u'pizza', 'c__smell': u'coffee'}, 
    {'b__color': u'black', 'c__taste': u'vanilla', 'c__smell': u'peppermint'}, 
    {'b__color': u'white', 'c__taste': u'pizza', 'c__smell': u'coffee'}, 
    {'b__color': u'white', 'c__taste': u'vanilla', 'c__smell': u'peppermint'}, 
    {'b__color': None, 'c__taste': None, 'c__smell': None}
]

关于python - 在 Django 中连接多个表以生成单个报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30717775/

相关文章:

Python:如何才能获得变量的值而不是其地址

python - django 测试客户端问题

mysql - 使用 mysql 将值插入带有外键的表中

android - 记事本教程 : deleteDatabase() function

python - 如何在 python 中使用原始方法扩展继承的方法

python - ValueError : Unknown loss function: categorical crossentropy. 请确保将此对象传递给 `custom_objects` 争论

python - 使用后序遍历创建完美的二叉树

Django:如何在管理端覆盖 unique_together 错误消息?

python - Django 计数 RawQuerySet

database - 如何在 UML 中标记数据库组件?