@ddgryaz

Что не правильно сделал, при создании моделей или редактора модели?

Здравствуйте!

Мне необходимо создать две модели, скажем это "Справочник" и "Элемент справочника". Следуя книге Дронова "Django 3.0" я связываю модели и создаю редактор в файле admin.

Код с файла models:
from django.db import models


class Handbook(models.Model):
    title = models.CharField('Наименование', max_length=250, db_index=True)
    short_title = models.CharField('Короткое наименование', max_length=100)
    description = models.TextField('Описание')
    version = models.CharField('Версия', max_length=250) #unique=True
    date = models.DateField('Дата начала действия справочника этой версии')

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = 'Справочник'
        verbose_name_plural = 'Справочники'


class Element(models.Model):
    r_id = models.ForeignKey(Handbook, on_delete=models.PROTECT, name='Родительский идентификатор')
    code = models.CharField('Код элемента', max_length=250)
    value = models.CharField('Значение элемента', max_length=250)

    def __str__(self):
        return self.value

    class Meta:
        verbose_name = 'Элемент'
        verbose_name_plural = 'Элементы'

Код с файла admin:
from django.contrib import admin
from .models import Handbook, Element


class ElementAdmin(admin.ModelAdmin):
    list_display = ('code', 'value', 'r_id')
    list_display_links = ('code', 'value')
    search_fields = ('code', 'value')


admin.site.register(Handbook)
admin.site.register(Element, ElementAdmin)


При запуска миграций я получаю сообщение об ошибке:
r_id = models.ForeignKey(Handbook.__str__(), on_delete=models.PROTECT, name='Родительский идентификатор')
TypeError: __str__() missing 1 required positional argument: 'self'

(venv) D:\PythonProject\DjangoProject\komtek_test\komtek>manage.py makemigrations
SystemCheckError: System check identified some issues:

ERRORS:
: (admin.E108) The value of 'list_display[2]' refers to 'r_id', which is not
a callable, an attribute of 'ElementAdmin', or an attribute or method on 'handbook.Element'.


Подскажите будьте добры, что я делаю не правильно? Мне необходимо сделать это, чтобы в последующем реализовать вывод на странице элементов, относящихся к определенному справочнику.
Так же, как я понимаю, в панели администратора Django, в перечислении всех элементов, должна выводится строка "родительский идентификатор" - где будет указано к какому справочнику принадлежит определенный элемент.
В книге дронов на примере выводит объявления, относящиеся к определенной рубрике.
Спасибо!
  • Вопрос задан
  • 239 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Art005
Handbook.__str__().
Вызываешь __str__ через класс, соответсвенно не передаешь экземпляр класса(self) методу str
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы