Django не может отобразить поля модели в шаблоне
У меня есть модель из пакета, из которой я хотел бы получить поля для пользователя в мой шаблон, но мне трудно заставить это работать, как я уже делал с моделью пользователя ранее:
модели
class DeviceManager(models.Manager):
def devices_for_user(self, user, confirmed=None):
devices = self.model.objects.filter(user=user)
if confirmed is not None:
devices = devices.filter(confirmed=bool(confirmed))
return devices
class Device(models.Model):
user = models.ForeignKey(getattr(settings, 'AUTH_USER_MODEL', 'auth.User'), help_text="The user that this device belongs to.", on_delete=models.CASCADE)
name = models.CharField(max_length=64, help_text="The human-readable name of this device.")
confirmed = models.BooleanField(default=True, help_text="Is this device ready for use?")
objects = DeviceManager()
class Meta:
abstract = True
def __str__(self):
try:
user = self.user
except ObjectDoesNotExist:
user = None
return "{0} ({1})".format(self.name, user)
view
from django_otp.models import Device
def account(request):
user = request.user
device = Device.objects.all()
context = {"user": user, "device": device}
return render(request, 'account.html',context)
шаблон
{{ device.name }}
{{ device.confirmed}}
Я получаю следующую ошибку:
AttributeError: Manager is not available; Device is abstract
Я также пытался изменить
device = Device.objects.all()
# To
device = DeviceManager.objects.all()
Но выдает следующую ошибку:
AttributeError: объект типа 'DeviceManager' не имеет атрибута 'objects'
Очень признателен за помощь в отображении содержимого из модели в мой шаблон. Спасибо
Вы не можете запрашивать абстрактные модели подобным образом. Я бы предложил взглянуть на Многотабличное наследование
Device.objects.all()
вернет кверисет устройств, поэтому вы можете переименовать переменную как devices = Device.objects.all()
.
В вашем шаблоне вы можете обращаться к атрибутам name
и confirmed
по экземпляру в списке, как {{ device.0.name }}
, {{ device.1.name }}
.
Более вероятно, что вы захотите использовать цикл
{% for device in devices %}
{{ device.name }}
{% endfor %}
Чтобы использовать свой менеджер моделей, попробуйте devices = Device.objects.devices_for_user(user)