2011-03-05 59 views
1

是否有任何方式比较来自不同模型的两个ManyToMany关系?django多对多比较

我有共同点,这个其他两款车型的典范天:

  • 门票(门票有天一个M2M关系)
  • 支票(支票有天一个M2M关系)

我可以做两个看起来不漂亮或不可读的东西。

+0

给我的感觉,你应该再看看你的数据模型。如果您需要根据其他标准来检查票证的平等性,您可能会遇到麻烦。 – Thomas 2011-03-05 19:47:55

回答

0

我真的不知道你在做什么。您是否想要使用与Checkday s相同的days来提取所有Ticket

class Day(models.Model): 
    # don't know what fields exist.. 
    date = models.DateField(...) 

check = Check.objects.all()[0] 
check_dates = [day.date for day in check.days.all()] 
tickets_for_check = Ticket.objects.filter(days__date__in=check_dates) 

这假定具有日期'x'的Ticket-Day实例与具有日期'x'的Check-Day实例具有不同的id。基本上,同一天是一个不同的实例,取决于它来自哪个模型。

输出示例很好,也是你的模型描述。这应该可以做到这一点。噢,比较表中的值而不是ID会表现得非常糟糕。请按照@Thomas的建议重新考虑您的数据模型,或者在您的Day模型的date属性上创建索引。

0

如果我正确地读你的问题,你可以实现你在客票在M2M声明定义相关的名字叫什么并检查模型,然后比较查询集

例如:

class Day(models.Model): 
    day = models.DateField() 

class Ticket(models.Model): 
    ticket_name = models.CharField() 
    days = models.ManyToMany(Day, related_name="tickets") 

class Check(models.Model): 
    check_name = models.CharField() 
    days = models.ManyToMany(Day, related_name="checks") 

现在要找到一个指定日期的所有门票和检查,对它们进行比较,你可以这样做:

date = datetime.date(day=1, month=1, year=2000) 
day = Day.objects.select_related().get(day=date) 

ts = day.tickets 
cs = day.checks 
如果你想对我所有的检查

那都需要与ticket_name =票的票:

checks_for_ticket = Check.objects.filter(days__tickets__ticket_name="tickets") 

如果你希望所有对涉及与check_name一个检查天=票查询:

tickets_for_check = Ticket.objects.filter(days__checks__check_name="check")