如何在django中基于ForeignKey过滤ManyToManyField? (像Django Smart Select那样)

时间:2011-04-25 10:59:57

标签: django django-models django-admin

我的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链接选择。

谢谢

1 个答案:

答案 0 :(得分:0)

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

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

这将返回该课程的所有相关单元的单个列表。 您可以将此列表作为对ajax请求的回复发送,迭代此列表并在unit中填充ExamSchedule form的选择框。我认为简单的ajax因为它非常灵活。