Django - 按用户过滤

时间:2017-11-26 22:02:33

标签: python django django-models django-templates django-queryset

我想在他们的帐户中从路径模型中呈现属于“驱动程序”的数据。 page - 所以显示他们到目前为止保存在数据库中的leave_from,destination等数据。

Models.py:

class Driver(models.Model):
    user = models.OneToOneField(User, default=1)
    first_name = models.CharField(max_length=120, blank=True, null=True)
    last_name = models.CharField(max_length=120, blank=True, null=True)
    tel = models.CharField(max_length=120, blank=True, null=True)
    slug = models.SlugField(max_length=120, unique=True)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated = models.DateTimeField(auto_now_add=False, auto_now=True)

    def __str__(self):
        return self.user.username

    def get_absolute_url(self):
        return reverse("account", kwargs={"slug": self.slug})

    def save(self, *args, **kwargs):
        self.slug = slugify(self.first_name)
        super(Driver, self).save(*args, **kwargs)

class Route(models.Model):
    leave_from = models.CharField(max_length=120, blank=True, null=True)
    destination = models.CharField(max_length=120, blank=True, null=True)
    date = models.DateField(auto_now_add=False, auto_now=False)
    time = models.TimeField(auto_now_add=False, auto_now=False)
    driver = models.ForeignKey(Driver, on_delete=models.CASCADE)

    def __str__(self):
        return self.leave_from

我玩过各种查询集,下面是最接近的地方(我想......我是编码和Django的新手)。

Views.py:

def route(request, slug):
    routedetails = Driver.objects.filter(route=request.user.driver.route_set.all())
    context = {
        "routedetails": routedetails,
        }
    return render(request, "route.html", context)

通过这种方式,我可以让用户在该路径的路径中显示相同数量的数据实例。

模板:

    {% for route in routedetails %}
        <p>{{ route.user }}</p>
    {% endfor %}

我尝试了所有不同的版本,但我觉得这让我最接近,因为它至少会让用户返回与此用户的路径数据相同的次数。在这种情况下,在Route中保存了2条路由,因此用户名将返回两次。我已经对其他用户进行了测试,但它始终匹配。

我到处寻找,只要我能够得到任何帮助,我就会感激不尽。

1 个答案:

答案 0 :(得分:3)

如果您需要Route详细信息,最好直接查询Route模型:

routedetails = Route.objects.filter(driver__user=request.user)

然后,您可以遍历模板中的Route个对象:

{% for route in routedetails %}
    <p>{{ route.leave_from }}</p>
    <p>{{ route.destination }}</p>
    ...
{% endfor %}