2011-03-05 79 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")