2017-05-30 34 views
0

我有一個創建類的教師模型。我有另外一種學生參加課程但不創作的模式。我也有類模型。我試圖做的是讓學生搜索課程並單擊結果並將其添加到他們參與的課程中。我有搜索工作,但無法讓第二部分工作。將模型字段設置爲搜索結果

我有我的學生模型作爲ManyToManyField,因爲我認爲Classe應該有不止一個學生,並且學生可以參加一個以上的Classe。出於某種原因,在管理員中,一旦添加了學生,它就會自動參與所有創建的類。我試圖讓學生在搜索這些課程後只參加他們選擇的課程。

我的學生模型:

class Student(User): 
    classe = models.ManyToManyField(Classe) 
    school_name = models.CharField(max_length=250) 

我的觀點:

def add_course(request, classe_id): 
    #c = Classe.objects.get(pk=classe_id) 
    request.user.classe = classe_id 
    request.user.save() 
    return 

我應該有CLASSE作爲一個定義與學生的多對多關係? 另外,由於我與學生有ManyToMany關係,因此我可以根據學生過濾課程對象,但是當我這樣做時,什麼也沒有顯示出來。

謝謝。

回答

1

我想你只是誤解了管理員中的多選字段的用戶界面。它總是顯示所有選項;但實際爲該用戶選擇的內容將顯示爲突出顯示。當然,默認情況下,不會選擇任何選項,但您可以點擊它們來添加它們。

您可能會發現使用該字段的filter_horizontal選項會更好,這會使界面更清晰。

class StudentAdmin(admin.ModelAdmin): 
    model = Student 
    filter_horizontal = ('classe',) 

其次,添加一條路線爲用戶在你看來,你需要使用.add()

request.user.classe.add(classe_id) 

您不必這樣做之後調用save()

+0

好的,非常感謝。爲什麼filter_horizo​​ntal選項更好? – thatguy

+0

試試看看。與其將所有選項列在一個框中,並且只顯示通過突出顯示哪些選項,它將它們分成單獨的框用於選定和未選中,用一些JS按鈕在它們之間移動選項。 –

+0

好吧,聽起來不錯,感激不盡。 – thatguy

相關問題