django多对多比较

时间:2011-03-05 19:33:55

标签: python django many-to-many compare

有没有办法比较不同模型中的两个ManyToMany关系?

我有一个共同的模型天和其他两个模型:

  • 门票(门票与天数的关系为m2m)
  • 检查(支票与天数的m2m关系)

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

2 个答案:

答案 0 :(得分:1)

如果我正确地阅读了您的问题,您可以通过在故障单和检查模型中的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相关的日期进行所有检查,并使用ticket_name = ticket:

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

如果您想要与Check with check_name = check:

相关的日期内的所有票证
tickets_for_check = Ticket.objects.filter(days__checks__check_name="check")

答案 1 :(得分:0)

我真的不知道你在追求什么。是否要使用与Ticket days相同的Check来获取所有day

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建议的数据模型,要么在date模型的Day属性上创建索引。