如何在 Django html 页面中显示外键数据?

Posted

技术标签:

【中文标题】如何在 Django html 页面中显示外键数据?【英文标题】:How to display Foreignkey Data in Django html page? 【发布时间】:2020-12-26 02:22:34 【问题描述】:

我想从相关的外键模型中获取数据,但是我无法从相关模型中获取数据,请告诉我该怎么做。我想显示来自Model2 表的name 值..

这是我的models.py 文件...

class Customer(models.Model):
    cus_name=models.Charfield(blank=True)

class Model1(models.Model):
    namefield=models.Charfield(blank=True)

class Model2(models.Model):
    name=models.CharField(default=None)
    model1=models.Foreignkey(Model1, related_name='model_one', on_delete=models.CASCADE)
   customer=models.Foreignkey(Customer, related_name='customer_data', on_delete=models.CASCADE)

这是我的views.py 文件...

def display_data(request, id):
     test_display=Model1.objects.filter(pk=id).first()
     return render(request, 'page.html', 'test_display':test_display)

这是我的test.html 文件,我在其中显示来自Model2 表的name

<p>test_display.model_one.name</p>

【问题讨论】:

【参考方案1】:

首先,使用get()get_object_or_404()方法代替filter(...).first()

 from django.shortcuts import get_object_or_404

 def display_data(request, id):
     test_display=get_object_or_404(Model1.objects.prefetch_related('model_one'), pk)  
     # or Model1.objects.prefetch_related('model_one').get(pk=pk)
     return render(request, 'page.html', 'test_display':test_display)

并且在模板中,使用reverse relation查询Model1实例:

% for object in test_display.model_one.all %
     object.name 
% endfor %

由于Model1和Model2之间的关系由于ForeignKey是多对一的,反向查询Model2实例会得到多个Model1对象。如果您只想为 Model2 存储一个对象,请考虑使用OneToOne 关系。

【讨论】:

它工作得很好,但我也想要来自Model2Customer 数据,我想显示来自Customer 模型的name...请检查我更新的问题 然后使用 object.customer.name 它工作得很好,但在for loop 上面给了我一行输出...例如-name1 name2 但我想要comma-separated 像这样name1, name2 你好 Rudra,你能解决这个问题吗...***.com/questions/63840351/…【参考方案2】:

首先你必须修复你的语法错误:

def display_data(request, id):
    test_display = Model2.objects.filter(pk=id).first()
    context = 
        'test_display': test_display
    
    return render(request, 'page.html', context)

# render instead of ender

第二个尝试像这样访问查询集:


<p>  test_display.name  </p>

【讨论】:

它给了我错误Model1 Object is not iterable 它将显示来自Model1 的名称,但我想显示来自Model2 的名称值 @sainitor 然后查询model2,查看答案 我想在查询中使用Model1 获取Model2 的数据,因为我在Model1Model1 中有多个与其他模型相关的数据存储...所以我的优先级是使用Model1显示数据

以上是关于如何在 Django html 页面中显示外键数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 网站的 HTML 页面中显示数据库数据?

Django 多外键导航

Django - 显示结果信息,同时使用具有多个外键关系的模型优化数据库查询

Django如何将外键传递给ModelForm字段

带有内联表单集的 Django 表单验证

Django的管理页面怎么显示和过滤另外一个表的字段,非外键