有没有办法比较不同模型中的两个ManyToMany关系?
我有一个共同的模型天和其他两个模型:
我可以用两个看起来不那么漂亮或可读的东西。
答案 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
属性上创建索引。