Я разрабатываю свой первый проект Django для практики, и у меня возникла проблема с самореферентными внешними ключами.
У меня есть приложение под названием "единицы", в котором есть модели.py:
from django.db import models
class Unit(models.Model):
name = models.CharField(
'Unit',
max_length=255,
blank=True
)
quantity_per = models.DecimalField(
'Quantity Per',
max_digits=10,
decimal_places=5,
default=1
)
subunit = models.ForeignKey(
'self',
blank=True,
null=True,
on_delete=models.SET_NULL,
related_name='+',
verbose_name="subunit"
)
abbreviation = models.CharField(
'Abbreviation',
max_length=255,
blank=True
)
def unit_factor(self):
return self.subunit.quantity_per * self.quantity_per
def __str__(self):
return self.name
И это упоминается в моем простейшем шаблоне индекса следующим образом:
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'units/style.css' %}"/>
{% if unit_list %}
<ul>
{% for unit in unit_list %}
<li>{{ unit.name }} - {{ unit.subunit }} - {{ unit.subunit.quantity_per }} - {{ unit.unit_factor }}</li>
{% endfor %}
</ul>
{% else %}
<p>No units are available.</p>
{% endif %}
Когда я запускаю сервер и перехожу к URL-адресу «единиц», я получаю следующую ошибку:
'NoneType' object has no attribute 'quantity_per'
Я думаю, это как-то связано со мной, когда я создаю метод в том же классе, что и самореференциальный внешний ключ, а дочерний экземпляр еще не полностью создан?Но я уверен, что мое отсутствие знаний в области программирования показывает.Как я могу правильно выполнить подобные операции в этих отношениях?
ОБНОВЛЕНИЕ Я отмечаю это как решенное, но я хотел добавить свое представление согласно запросу @ alexandre-cox:
from django.template import loader
from django.views import generic
from .models import Unit
class IndexView(generic.ListView):
template_name = 'units/index.html'
def get_queryset(self):
return Unit.objects.order_by('name')
Спасибо за ваше терпение, ответив на этот вопрос!