编写查询以查看子项是否存在于不同的表中并显示模板中是否存在

时间:2014-02-15 19:06:58

标签: django django-views django-queryset

我有一个简单的应用程序,当孩子遇到问题时,会为父母的每个孩子创建当天的日志条目。

因此,例如,Parent包含三个子项。

每次与Child交互时,我都会在Log表中创建一个条目来记录操作。日志按日组织。因此,我可以在周二为三个孩子提供3个条目,在周三给同一个三个孩子提供4个条目。

我想编写一个查询,检查当天日志中是否存在Child。因此,当页面加载或刷新时,我设置一个模板变量,表明它确实存在于日志中。

我一直在想以下查询将理清我需要的内容。但是我很难搞清楚丢失的部分。

型号:

class Child(models.Model):
    description = models.TextField()

class Log(models.Model):
    child = models.ForeignKey(Child, related_name="child_log")
    day = models.DateField(auto_now_add=True, editable=False)

class Parent(models.Model):
    parent_children = models.ManyToManyField(Child, blank=True, null=True)

查询集:

today = date.today()
children = Child.objects.filter(parent=parent.id) <= parent.id comes from request kwargs
child_list = Child.objects.filter(id__contains=children.id)
does_exist = Log.objects.filter(child=child_list.id).filter(day=today)

但后来我想在模板中为每个Child添加do_exist状态。这样,如果孩子已经登录,我可以显示不同的状态。

把它想象成一个带有待办事项的待办事项列表,可以在一天内重复完成。如果它在一天内完成,我们需要证明它已经完成。如果没有,那么我们可以证明它没有。

我希望这很清楚。欢迎任何建议。

1 个答案:

答案 0 :(得分:0)

嗯......如果我理解正确的话,试试这个

{% for child in childs %}
    {% if child.child_log.today.exists %}
    #do your staff
...

将经理写入Log:

class LogManager(models.Manager)
    def today(self)
        return self.get_query_set().filter(day=datetime.datetime.today())

...
class Log(models.Model):
    child = models.ForeignKey(Child, related_name="child_log")
    day = models.DateField(auto_now_add=True, editable=False)

    objects = LogManager()