使用外键创建查询并按Django中的某些数据进行分组

时间:2015-04-07 22:16:10

标签: django foreign-keys django-queryset

我好几天都在想我的问题,我需要对此有一个全新的看法。

我正在为他的交付为客户建立一个小型应用程序。

# models.py - Clients app

class ClientPR(models.Model):

    title = models.CharField(max_length=5,
                         choices=TITLE_LIST,
                         default='mr')

    last_name = models.CharField(max_length=65)
    first_name = models.CharField(max_length=65, verbose_name='Prénom')

    frequency = WeekdayField(default=[]) # Return a CommaSeparatedIntegerField from 0 for Monday to 6 for Sunday...

[...]


# models.py - Delivery app

class Truck(models.Model):

    name = models.CharField(max_length=40, verbose_name='Nom')
    description = models.CharField(max_length=250, blank=True)
    color = models.CharField(max_length=10,
                         choices=COLORS,
                         default='green',
                         unique=True,
                         verbose_name='Couleur Associée')


class Order(models.Model):

    delivery = models.ForeignKey(OrderDelivery, verbose_name='Delivery')
    client = models.ForeignKey(ClientPR)
    order = models.PositiveSmallIntegerField()


class OrderDelivery(models.Model):

    date = models.DateField(default=d.today())
    truck = models.ForeignKey(Truck, verbose_name='Camion', unique_for_date="date")

所以我试图得到一个查询,我得到了这个:

ClientPR.objects.today().filter(order__delivery__date=date.today())
                .order_by('order__delivery__truck', 'order__order')

但是,我没有做我真正想要的事情。

我希望按卡车分组客户obj(查询集)并按今天的交货单排序! 问题是,我想拥有当天的每个客户,即使他们不在交货清单和过滤器中,也不是它。

我可以使用OrderDelivery模型进行查询,但我只会获得交付的客户,而不是当天的所有客户......

也许我需要用Q对象来做?甚至原始的SQL? 也许我以错误的方式建立了我的模型关系?或者我需要降低我想做的事情......好吧,现在,我需要你的帮助才能看到新眼睛的问题!

感谢那些需要一些时间来帮助我的人。

1 个答案:

答案 0 :(得分:0)

经过一些测试,我决定用2个查询来获得一张桌子。 一个来自OrderDelivery Queryset,用于获取由Trucks重新组合的客户端列表,另一个来自ClientPR Queryset,用于没有为其设置交付集的所有客户端。

我那样,没问题!

相关问题