Django从子数据访问模板中的父数据

2024-04-19 12:57:10 发布

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

所以我一直在寻找并试图解决这个问题,但我似乎找不到答案

我有两种不同型号的航班和目的地。目的地是父模型,一个航班只能有一个目的地,但目的地可以有多个航班(一对多关系)

我想在飞行模型的详细信息页面上访问此父模型。此详细信息页面通过url路由和航班的slug生成。以下是我为模型、视图和模板提供的信息

型号:

class Flight(models.Model):
    title = models.CharField( null=True, max_length=60, blank=True)
    slug = models.SlugField(max_length=100, null=True, blank=True)
    flight_destination = models.ForeignKey(Destination, null=True, blank=True, on_delete=models.SET_NULL)

class Destination(models.Model):

    title = models.CharField( null=True, max_length=60, blank=True)
    featuredimage = models.ImageField(null=True, blank=True, upload_to ='media/')
    slug = models.SlugField(max_length=100, null=True, blank=True)

每个类的主键都有一个id,我已经将所有航班连接到了正确的目的地

以下是我的观点

def flight_detail(request, slug):
    
    return render(request,"flight/detail.html",context= {'flight': Flight.objects.get(slug=slug), 'destination': Destination.objects.filter(id= Flight.objects.get(slug=slug).flight_destination_id)})

这是一个模板,但它不会抛出错误,但它不会显示任何内容

<h3 class="pb-3">
 {{ destination.title }}
</h3>

我觉得这应该是一个非常常见的问题,有很多直截了当的答案,但我似乎什么都找不到。任何帮助都将不胜感激


Tags: 模型truetitlemodelsdestinationnulllengthmax
2条回答

正是我想要的,谢谢!从我写这篇文章的时候起,我就可以在模板上使用forloop来运行我的原始版本,但是我觉得你的解决方案更干净,更适合实现这一点。再次感谢

您可以直接在flight对象中访问flight_destination,您可以在render方法之外获得flight对象,使其更清晰,并可以访问destination属性对象,如下所示:

def flight_detail(request, slug):
    flight = Flight.objects.get(slug=slug)
    return render(request, "flight/detail.html",
            context = {
                'flight': flight, 
                'destination': flight.flight_destination 
            }
)

相关问题 更多 >