我们过滤的Django

2024-04-26 19:05:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在他们的“帐户”页面中呈现属于驱动程序的路由模型的数据,以便显示他们保存在数据库中的出发地、目的地等数据。在

在模型.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)。在

在视图.py公司名称:

^{pr2}$

这样,我就可以让用户为该驱动程序显示相同数量的数据实例。在

模板:

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

我尝试了所有不同的变化,但我觉得这是我最接近的,因为它至少返回用户相同的次数,有数据在路由上为这个用户。在这种情况下,Route中保存了2条路由,因此用户名返回两次。我在其他用户上做过测试,结果总是匹配的。在

我到处都找过了,这是我所能得到的最大程度的帮助。在


Tags: 数据selfaddfalsetrueautomodelsdef
3条回答

要登录驾驶路线,最简单的方法是。在

在视图.py在

routes = request.user.driver.route_set.all()

模板

^{pr2}$

袖珍国王的解决方案很好,应该被接受。这是一个例子,如果你想显示多个司机的路线(管理页面?)为了避免N+1查询。这将预取与驱动程序相关联的所有路由,并为每个驱动程序添加一个属性routes及其特定路由,以便以后消除不需要的SQL查询。在

from django.db.models import Prefetch

drivers = Driver.objects.all()
queryset = drivers.prefetch_related(Prefetch('route_set', queryset=Route.objects.filter(driver_id__in=drivers), to_attr='routes'))

模板

^{pr2}$

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

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

然后可以迭代模板中的Route对象:

^{pr2}$

相关问题 更多 >