2011-04-25 71 views
0

我在models.py四種模式分別是:如何在django中基於ForeignKey過濾ManyToManyField? (如Django的智能選擇一些東西做)

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鏈接選擇。

感謝

+0

無人能幫助我嗎? – Anshul 2011-04-27 07:51:46

回答

0

您可以用Ajax發送請求所選擇的課程,這樣做是爲了獲得相關單位。 比方說,你選擇communication networks (cn)作爲當然你也可以得到相關單位,像這樣:

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

這將返回所有相關單位,以該課程的一個列表。 您可以發送此列表作爲對ajax請求的響應,遍歷此列表並填充的選擇框ExamSchedule form。我認爲簡單的阿賈克斯,因爲它非常靈活。

+0

正確的目標...我實際上實現相同,但忘記提及我在Stackoverflow的答案。反正謝謝Pannu :) – Anshul 2011-08-30 08:55:07

+0

哦,這真的很好:)你發送了一個json響應? – Pannu 2011-09-01 14:43:39

+0

再次您的猜測是正確的。我使用JSON作爲迴應;) – Anshul 2011-09-02 03:52:12

相關問題