当前位置: 首页 > 知识库问答 >
问题:

Django外键未在模板中呈现相关模型数据

金令
2023-03-14

对编码来说是新的,如果已经涵盖了,请道歉。花了几个晚上在Django的文档、YouTube、谷歌和这里尝试各种方法来解决这个问题。

我有一个与驾驶员相关的模型路线,我试图在我的模板上显示所有与该路线相关的驾驶员的路线。然而,目前我所能得到的只是来自路线模型的数据,而不是相关驾驶员的数据。

会感谢任何帮助,因为我正在努力让我的头!

Models.py

class Driver(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, 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.first_name

    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)
    drivers = models.ForeignKey(Driver, on_delete=models.CASCADE)

    def __str__(self):
        return self.leave_from

Views.py

def drivers(request):
    qs = Route.objects.all().select_related()
    context = {
        "qs": qs,
        }
    return render(request, 'drivers.html', context)

样板

{% for instance in qs %}
    <p>{{ instance.user }} <br> {{ instance.first_name }} {{ instance.last_name }} {{ instance.tel }} {{ instance.destination }} </p>

    <iframe width="600" height="450" frameborder="0" style="border:0" src="https://www.google.com/maps/embed/v1/directions?origin={{ instance.leave_from }}
    &destination={{ instance.destination }}
    &key=AIzaSyAyuIOgVteQ0NLxCCTz4axRmta_JL3OVL4">
    </iframe>
{% endfor %}

我尝试过.prefetch_related('driver')和其他一些组合,但我要么只得到路由数据,要么得到一个错误。

提前谢谢。

免责声明几天前我确实问过这个问题,但是没有模板,在我编辑后没有得到任何进一步的回复。我只是在一堵砖墙前,所以会感激任何关于我哪里出错的指示。

共有1个答案

萧霍英
2023-03-14

在这里:

{% for instance in qs %}
    <p>{{ instance.user }} <br> {{ instance.first_name }} {{ instance.last_name }} {# etc #}

实例是一个路由对象,您要查找的属性属于驱动程序对象。你想要:

{% for route in qs %}
    {% with driver=route.drivers %} {# XXX should be named 'driver' #}
    <p>{{ driver.user }} <br> {{ driver.first_name }} {{ driver.last_name }} 
{# etc #}

当我们在做的时候:Route.drivers应该重命名为Route.driver(这是一个外键,不是很多,所以你每个路线只有一个驱动程序,所以你想要一个单数表示集合的复数),您应该使用。select_related(驱动程序,driver__user)在这里(参见Django ORM中select_related和prefetch_related之间的区别是什么?用于何时使用select_relatedprefetch_related)。

另外,如果驱动程序模型中已经存在用户中的名字和姓氏,是否有任何理由复制它们?哦,是的,在Route中,您将auto\u now\u add=Falseauto\u now=False添加到日期字段中,这是没有用的,因为这些是默认值。

 类似资料:
  • 问题内容: 我知道你会说这个问题被问过很多次了,但是我还没有解决呢… models.py views.py 模板: 我已经尝试过上面的模板,但没有得到任何结果。所以我想在DocImage类中获取imageurl地址… 所有帮助 问题答案: 如果您查看外键文档,如果您有类似的关系 您需要像这样在DocImages类上定义外键: 如果您未设置相关名称,则可以像下面这样从Doc访问DocImage: 有

  • 问题内容: 一个布局模板和三个子模板。 layout.html tags.html content.html comment.html 代码 我很困惑如何渲染每个子模板并将结果组合到布局输出中。 谢谢。 问题答案: 与往常一样,该文档是一个很好的起点。 我在操场上写了一个工作实例 解释一下: 您不需要struct文字中的字符串:,而不是 您只能将单个对象传递给模板才能执行,这将按照指令中的要求将对

  • 问题内容: 我正在寻找一种使用django中的模运算符之类的方法。我想做的是在循环中的每个第四个元素中添加一个类名。 使用模数,它看起来像这样: 当然,这是行不通的,因为%是保留字符。还有其他方法吗? 问题答案: 您需要divisibleby(内置的django过滤器)。

  • 当我的模板包含一些JavaScript时,我遇到了一个问题。例如: 果然,模板解释器希望将双卷曲大括号{{}}中的所有内容解释为变量。现在我想知道是否有办法关闭类似于的此类行为。

  • 我创建了一个出价模型,以便类型2用户可以在类型1用户创建的一些“帖子”上出价。为了实现这一点,我在模型“出价”中为帖子字段做了一个外键。 实际上,我想把出价与一个特定的帖子联系起来,在“帖子”模型中自动生成“id”。因此,我将get_absolute_url放在我的模板中的Post'id'旁边。我是django的新手,我不确定它是否能满足我的需求。 我如何将带有post_id的出价与模板中的某个特