是否有任何方式比較來自不同模型的兩個ManyToMany關係?django多對多比較
我有共同點,這個其他兩款車型的典範天:
- 門票(門票有天一個M2M關係)
- 支票(支票有天一個M2M關係)
我可以做兩個看起來不漂亮或不可讀的東西。
是否有任何方式比較來自不同模型的兩個ManyToMany關係?django多對多比較
我有共同點,這個其他兩款車型的典範天:
我可以做兩個看起來不漂亮或不可讀的東西。
我真的不知道你在做什麼。您是否想要使用與Check
day
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
屬性上創建索引。
如果我正確地讀你的問題,你可以實現你在客票在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")
給我的感覺,你應該再看看你的數據模型。如果您需要根據其他標準來檢查票證的平等性,您可能會遇到麻煩。 – Thomas 2011-03-05 19:47:55