首页 > 解决方案 > 将 OneToOne 关系传递给 Django 模板

问题描述

我正在尝试在 Django 中设置 OneToOne 关系,以便显示来自TableA特定TableB记录的数据。

我在弄清楚如何在我的视图中显示它时遇到问题,那里有例子,但有些似乎有点过时或有我不熟悉的解决方案。

我在视图文件和模板文件中尝试了一些不同的调用,但没有任何运气,任何输入都将不胜感激!

我的模型.py

from django.db import models

# Create your models here.
class tableA(models.Model):
    created = models.DateTimeField(default=None)
    published = models.CharField(max_length=50, default=None)
    publisher = models.CharField(max_length=50, default=None)
    code = models.CharField(max_length=25, null=True, unique=True)

    class Meta:
        db_table = 'tableA'
        unique_together = (("publisher", "published"),)
    def __str__(self):
        return self.created

class tableB(models.Model):
    tableA = models.OneToOneField(tableA, on_delete=models.CASCADE, primary_key=True, default=None)
    code = models.CharField(max_length=50, default=None, null=True)
    url = models.CharField(max_length=100, default=None, null=True)

    class Meta:
        managed = True

    def __str__(self):
        return self.tableA.code

我的观点.py

def nani(request):

    data = TableA.objects.all()
    return render(request, 'site/home.html', {'data':data})

我的模板

{% for test in data %}
    <tr>
        <td>{{ test.published }}</td>
        <td>{{ test.publisher }}</td>
        <td>{{ test.TableB.url }}</td>
    </tr>
{% endfor %}

标签: djangodjango-modelsdjango-viewsdjango-templates

解决方案


如果大写/小写字母和你说的一样,就这样做吧,我只是测试了一下。

视图.py

from .models import tableA

def nani(request):
    data = tableA.objects.all()
    return render(request, 'site/home.html', {'data': data})

在您的网站/home.html中:

{% for test in data %}
    {{ test.published }}
    {{ test.publisher }}
    {{ test.tableb.url }}
{% endfor %}

你的str方法也有问题。datetime 不是字符串格式。所以在你的models.py中,你必须像这样修复这一行:

def __str__(self):
    return str(self.created)

推荐阅读