О настройке информации выпадающего меню в модуле экспорта импорта 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')

Вот несколько простых объяснений для модели:

  1. Первая модель предназначена для добавления новых книг, включая название и описание книги, идентификатор модели будет сгенерирован автоматически django.
  2. Вторая модель предназначена для добавления новых категорий для книги, например: рецепты, справочники по инструментам... и т.д. Идентификатор модели также будет сгенерирован автоматически django.
  3. Третья модель предназначена для таблицы сопоставления, которая соединяет данные книги, добавленные первой моделью, и данные категории, добавленные второй моделью, вместе, используя идентификаторы из двух вышеуказанных моделей в качестве внешних ключей. После этого данные должны быть сопоставлены друг с другом следующим образом:

История Джона(название книги), Приключения(категория).

Мой вопрос заключается в том, что после того, как я успешно построил эти три модели, и добавил следующие данные с помощью страницы администрирования 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"
Вернуться на верх