【问题标题】:How can i filter a ManyToManyField on the basis of ForeignKey in django? (Something like Django Smart Select do)如何根据 django 中的 ForeignKey 过滤 ManyToManyField? (类似于 Django Smart Select 的做法)
【发布时间】:2011-04-25 10:59:56
【问题描述】:

我的 models.py 中有四个模型:

models.py

class Course(models.Model):
    course_code = models.CharField(max_length=100,unique=True)
    title = models.CharField(max_length=200)
    short = models.CharField(max_length=50)
    elective_group = models.CharField(max_length=100)

class Unit(models.Model):
    title = models.CharField(max_length=100)
    short = models.CharField(max_length=50)
    course = models.ForeignKey(Course)

class Pattern(models.Model):
    pattern_name = models.CharField(max_length=200)

class ExamSchedule(models.Model):
    exam_date = models.DateTimeField()
    course = models.ForeignKey(Course)
    pattern = models.ForeignKey(Pattern)
    units = models.ManyToManyField(Units)

我已在管理站点注册了所有这些模型,因此我可以为这些模型使用管理功能。

我的问题是,当用户创建或编辑 ExamSchedule 对象时,我希望单位(字段)多值小部件应仅包含与课程相关联的值,因为每门课程都可以有多个单位。因此,如果用户创建一个 Examschedule 对象并在从下拉列表中选择课程后,单元小部件应仅包含与所选课程相关的单元。

Django-Smart-Select 可能很有用,但它只支持外键链接和分组选择,也不支持 ManyToManyField 链接选择。

谢谢

【问题讨论】:

  • 没人能帮我吗?

标签: django django-models django-admin


【解决方案1】:

您可以通过Ajax 请求发送所选课程并执行此操作以获取相关单元。 假设您选择communication networks (cn) 作为课程,您可以获得相关单元,如下所示:

cn_units = Unit.object.filter(course = 'cn').values_list('id',flat=True)

这将返回该课程所有相关单元的单个列表。 您可以将此列表作为对您的ajax 请求的响应发送,遍历此列表并在ExamSchedule form 中填充unit 的选择框。我考虑使用普通的 ajax,因为它非常灵活。

【讨论】:

  • 目标正确...我实际上实现了相同但忘记提及我在 Stackoverflow 上的答案。无论如何感谢 Pannu :)
  • 哦,太好了 :) 你发送了 json 响应吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
  • 1970-01-01
  • 2018-07-25
  • 2012-04-29
  • 2016-03-28
  • 1970-01-01
  • 2010-09-22
相关资源
最近更新 更多