2010-10-26 48 views
3

我有Publication S和Author秒。由於Author也好嫉妒排序(教授不希望是促成一些瑣碎的數據實習生後上市),我定義的自定義多到多​​模:Django的:保存的ModelForm自定義多到很多車型

class Authorship(models.Model): 
    author = models.ForeignKey("Author") 
    publication = models.ForeignKey("Publication") 
    ordering = models.IntegerField(default=0) 

class Author(models.Model): 
    name = models.CharField(max_length=100) 

class Publication(models.Model): 
    title = models.CharField(max_length=100) 
    authors = models.ManyToManyField(Author, through=Authorship) 

我已經出版物獲得ModelForm,並在視圖中使用它。問題是,當我打電話給form.save()時,作者明顯增加了默認排序0。我寫了一個OrderedModelMultipleChoiceFieldclean方法返回要保存在正確的順序中的對象,但我沒有找到其中的M2M數據實際上保存在掛鉤,這樣我就可以添加/修改/刪除Authorship實例我。

任何想法?

回答

2

如果您使用的是定製的M2M表使用through參數,相信你必須做的,爲了節省額外的字段中手動保存。所以,在你看來,你想補充:

... 
publication = form.save() 
#assuming that these records are in order! They may not be 
order_idx = 0 
for author in request.POST.getlist('authors'): 
    authorship = Authorship(author=author, publication=publication, ordering=order_idx) 
    authorship.save() 
    order_idx += 1 

你也可以能夠把這個在您的ModelForm的save功能。

+0

當然你是對的。謝謝! – 2010-10-26 19:13:01

1

我不知道是否有這個鉤子,但是你可以用類似手動保存:

form = PublicationForm(...) 
pub = form.save(commit=False) 
pub.save() 
form.save_m2m() 

所以,你可以根據需要在間處理任何自定義操作。請參閱save method文檔中的示例。