【问题标题】:How to display Foreignkey Data in Django html page?如何在 Django html 页面中显示外键数据?
【发布时间】: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>

【问题讨论】:

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


    【解决方案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,你能解决这个问题吗...stackoverflow.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显示数据
    猜你喜欢
    • 2023-03-12
    • 2015-07-08
    • 2020-11-28
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 2020-12-18
    • 2012-11-25
    • 2020-12-27
    相关资源
    最近更新 更多