О настройке информации выпадающего меню в модуле экспорта импорта django
Пожалуйста, считайте, что это сайт библиотеки книг, у меня здесь три модели:
models.py
class books(models.Model):
book_name = models.CharField(verbose_name='book name',max_length=24)
book_desc = models.CharField(verbose_name='book description',max_length=240)
class classes(models.Model):
class_name = models.CharField(verbose_name='class name',max_length=24)
class map_book_class(models.Model):
book_id = models.ForeignKey(books, on_delete=models.CASCADE, verbose_name='book ID')
class_id = models.ForeignKey(classes, on_delete=models.CASCADE, verbose_name='class UID')
Вот несколько простых объяснений для модели:
- Первая модель предназначена для добавления новых книг, включая название и описание книги, идентификатор модели будет сгенерирован автоматически django.
- Вторая модель предназначена для добавления новых категорий для книги, например: рецепты, справочники по инструментам... и т.д. Идентификатор модели также будет сгенерирован автоматически django.
- Третья модель предназначена для таблицы сопоставления, которая соединяет данные книги, добавленные первой моделью, и данные категории, добавленные второй моделью, вместе, используя идентификаторы из двух вышеуказанных моделей в качестве внешних ключей. После этого данные должны быть сопоставлены друг с другом следующим образом:
История Джона(название книги), Приключения(категория).
Мой вопрос заключается в том, что после того, как я успешно построил эти три модели, и добавил следующие данные с помощью страницы администрирования django.
books
id book_name book_desc
1 John's Story a story for kids.
2 Best recipes good foods.
classes
id class_name
1 Adventures
2 Toolbooks
Используя третью модель, которая должна быть в состоянии сопоставить книгу с определенной категорией вместе, но я понял, что в выпадающем меню, он показывает id (первичный ключ) вместо другой информации, такой как 'book_name' или другой, как на скриншоте ниже. скриншот
Как вы можете видеть на скриншоте, представьте, что если у меня уже есть 100 различных книг и категорий в базе данных, я не могу распознать их все только по их id, как для книг, так и для категорий. Могу ли я спросить, есть ли способ заменить стандартные настройки показа (по id[первичный ключ]) на другие поля в выпадающем меню, такие как book_name или другие? Например, так:скриншот 2
Я знаю, что могу установить уникальные идентификаторы или использовать поле book_name в качестве первичного ключа, так как по умолчанию оно показывает поле первичного ключа в выпадающем меню, но я хочу, чтобы django автоматически генерировал для меня идентификатор для большого количества возможных данных в будущем использовании.
Спасибо за ответ! Это мое первое сообщение на stackoverflow, надеюсь, я ясно описал свой вопрос!
Несколько вещей, которые вы можете использовать для его улучшения.
- Попробуйте использовать CapWords для имен моделей Django (https://peps.python.org/pep-0008/#class-names). Используйте
Book
вместоbooks
. - Используйте отношения "многие ко многим" для классов книг вместо создания отношений самостоятельно .
- Используйте метод str() для получения человекочитаемых имен объектов вашей модели
- Читать Опции мета-модели для дальнейшего улучшения модели
Ваш файл models.py может выглядеть следующим образом:
class Book(models.Model):
name = models.CharField(verbose_name='book name',max_length=24)
desc = models.CharField(verbose_name='book description',max_length=240)
classes = models.ManyToManyField(
Class,
related_name='classes',
)
def __str__(self):
return self.name
class Meta:
ordering = ("name",)
class Class(models.Model):
name = models.CharField(verbose_name='class name',max_length=24)
def __str__(self):
return self.name
class Meta:
ordering = ("name",)
verbose_name = "Class"
verbose_name_plural = "Classes"