【问题标题】:limit the choices for objects related to the chosen in the select限制与选择中所选对象相关的对象的选择
【发布时间】:2018-11-20 19:21:45
【问题描述】:

我想知道是否有人知道返回与在选择选项中选择的会话相关的类别的方法。

例子:

class Session(models.Model):
    name = models.CharField("Sessão", max_length=100)
    slug = models.SlugField("Slug", max_length=100)

class Category(models.Model):
    session = models.ForeignKey(Session, verbose_name='Sessão', on_delete=models.CASCADE, max_length=100, default=1, blank=True, null=True)
    category = models.CharField("Categoria", max_length=100)
    slug = models.SlugField("Slug", max_length=100)

class Article(models.Model):
    category = models.ForeignKey(Category, verbose_name='Categoria', on_delete=models.CASCADE, max_length=100, default=1, blank=True, null=True)
    session = models.ForeignKey(Session, verbose_name='Sessão', on_delete=models.CASCADE, max_length=100, default=1, blank=True, null=True)

注册文章时,我会为文章定义一个会话,然后我想返回类别,只返回与该会话相关的类别。

谁能帮帮我? 我相信这必须是动态的......

强烈的拥抱!

【问题讨论】:

    标签: python django django-models django-admin django-admin-filters


    【解决方案1】:

    第一种解决方案:

    覆盖模板(Django Documentation 可以帮助您)

    在更改字段时,您需要对 API 进行 ajax 调用,该 API 接受 session_id 并返回所有类别。通过 JS 将返回的结果填充到类别中。

    另外,你可以试试django-ajax-selects

    第二个解决方案:(没有 JS/AJAX)

    要注册一篇文章,你可以先去会话管理,然后在那里有一个链接来添加一篇文章。

    一个。 如果你想做它 changeform_view 那么, 您可以使用 inline admin 并覆盖其表单 init() 来预填充类别。

    b. 如果你想要changelist_view中的链接,

    http://localhost:8000/admin/<app>/article/add/?session_id=<>
    

    您可以覆盖文章管理表单 init() 并读取传递的 session_id 并相应地使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-10
      • 2023-01-30
      • 2013-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多