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)

Вернуться на верх