2013-12-10 77 views
1

型號:如何同步在CreateView的OnetoOne關係

class Book(models.Model): 
    name = models.Char() 

class BookCount(models.Model): 
    book = OneToOneField(Book) 
    count = SmallIntegerField(default=0) 

觀點:

class BookCreate(CreateView): 
    model = Application 

問題是,後創建的書,我想插入一條記錄到bookcount後。有任何想法嗎?

回答

2

如果BookCount模型需要你可以使用一個偵聽器post_save信號沿此線:

# models.py 

from django.db.models.signals import post_save 

# Model definitions 
... 

def create_book_count(sender, instance, created, **kwargs): 
    if created: 
     BookCount.objects.create(book=instance) 

post_save.connect(create_book_count, sender=Book) 

如果你的模型是真的這樣簡單,你可能想要刪除BookCount模型,並添加一個count字段到您的Book模型,而不是在這裏降低複雜性和開銷。查看extending the user model的文檔對於爲什麼它可能是更好的避免OneToOneField選項的簡短概述(措辭是特定於User模型,但它在這裏也適用):

注意,使用相關的模型結果在額外的查詢或連接中檢索相關數據,根據您的需要,替換用戶模型並添加相關字段可能是您更好的選擇。但是,項目應用程序中默認用戶模型的現有鏈接可能會導致額外的數據庫負載。

+0

感謝您的幫助。由於只有Book BookCount與Book創建相關,所以BookCount上的進一步操作不會依賴Book。 – linbo

+0

@linbo無論哪種情況,每次爲新創建的「Book」調用「Book.save」時,都應該自動創建「BookCount」對象。 – jonafato