如何在CreateView中同步OnetoOne关系

时间:2013-12-10 03:21:41

标签: django django-models django-generic-views

模型:

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

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

的观点:

class BookCreate(CreateView):
    model = Application

问题是,在创建Book之后,我想在BookCount中插入一条记录。有什么想法吗?

1 个答案:

答案 0 :(得分: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模型,但它也适用于此处):

  

请注意,使用相关模型会导致其他查询或联接以检索相关数据,并且根据您的需要替换User模型并添加相关字段可能是您更好的选择。但是,项目应用程序中现有的默认用户模型链接可能会证明额外的数据库负载。