【问题标题】:Django admin manytomany fieldDjango admin 多对多字段
【发布时间】:2016-02-23 10:46:12
【问题描述】:

我是 django 的新手,我正在尝试在 django-admin 中实现 django 模型。

这是我的models.py:

class Author(models.Model):
    salutation = models.CharField(max_length=10)
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    email = models.EmailField()

    def __str__(self):
        return self.first_name


class Publisher(models.Model):
    name = models.CharField(max_length=30)
    address = models.CharField(max_length=100)
    website = models.URLField()

    def __str__(self):
        return '    %s  ---->  %s' % (self.name, self.address)


class Book(models.Model):
    title = models.CharField(max_length=30)
    publication_date = models.DateField()
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)

    def __str__(self):
        return self.title

当我通过管理站点创建一本新书时,它应该允许我选择一个或多个作者,但是所有作者都是自动选择的,并且没有删除任何选项的选项。加号表示添加更多作者,但没有表示删除已经相关的作者。

我想拥有我为任何特定书籍选择的特定作者。

【问题讨论】:

  • 离题:让你的类名单数和大写。成员 -> 成员。其次,不要创建自己的成员对象,而是使用内置的用户模型。像这样保存密码是一个很大的问题!说真的,不要这样做! ;)
  • 字段名称应为小写 Author -> author。甚至 SO 的代码高亮也给了你这个提示。
  • 是的.. ik.. 我只是在练习....@allcaps
  • 简洁的代码可以帮助人们帮助你。也帮助自己。有一天,你读回你的代码并且不明白哪里出了问题,却发现你没有遵守约定。人们也不太可能提供帮助。你希望他们做什么?坚持同样邋遢的作风?阅读 PEP-8:python.org/dev/peps/pep-0008
  • 您可以使用filter_horizontal 来创建更直观的小部件。

标签: python django


【解决方案1】:

我相信您误解了小部件的工作原理。 这是一个使用 Django 的默认小部件作为 ManyToManyField 的示例

示例:教师模型与语言模型相关:

teaching_languages = models.ManyToManyField('Language')

在以下情况下,选择英语和西班牙语作为与教师模型相关的值,而未选择法语和德语。 绿色 + 符号允许您将另一种语言添加到教学语言列表中。

【讨论】:

  • 是否可以为多对多字段创建 admin.TabularInline 或 admin.StackedInline?我一直在尝试,但这似乎是可用于多对多字段的唯一小部件。
猜你喜欢
  • 2016-03-21
  • 1970-01-01
  • 1970-01-01
  • 2012-05-15
  • 2013-11-17
  • 2021-08-01
  • 2021-06-01
  • 2013-09-14
  • 2014-02-20
相关资源
最近更新 更多