Передать отношения OneToOne в Django шаблонов - PullRequest
1 голос
/ 14 апреля 2020

Я пытаюсь настроить отношение OneToOne в Django, чтобы показать данные из TableA и TableB для конкретной записи c.

У меня возникли проблемы с выяснением, как показать его в моем представлении, примеры есть, но некоторые кажутся немного устаревшими или имеют решения, с которыми я не знаком. без удачи, любой вклад будет высоко ценится!

Мои модели.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

Мои views.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 %}

1 Ответ

1 голос
/ 14 апреля 2020

Если прописные / строчные буквы такие, как вы сказали, просто сделайте это, я только что проверил.

views.py

from .models import tableA

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

в вашем сайте / доме. html:

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

, а также что-то не так с вашим str методом. datetime не является строковым форматом. поэтому в models.py вы должны исправить эту строку следующим образом:

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