关于自定义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. 第一个模型用于添加新书,包括其名称和书籍描述,模型id将由django自动生成
  2. 第二个模型是为书添加新的类别,例如:食谱、工具书。。。等。模型id也将由django自动生成
  3. 第三个模型是一个映射表,它使用上面两个模型的id作为外键,将第一个模型添加的图书数据和第二个模型添加到一起的类别数据连接在一起。之后,数据应该像这样映射在一起:

约翰的故事(书名(,冒险(类别(。

我的问题是,在我成功构建了这三个模型之后,我使用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

我知道我可以设置唯一的id,或者使用book_name字段作为主键,因为默认设置在下拉菜单中显示主键字段,但我想让django自动为我生成id,以备将来使用大量可能的数据。

谢谢你的回答!这是我在stackoverflow上的第一篇帖子,希望我能清楚地描述我的问题!

你可以用一些东西来改进它。

  • 试着为Django模型名称使用CapWords(https://peps.python.org/pep-0008/#class-姓名(。使用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"

最新更新