【发布时间】:2019-01-06 20:24:27
【问题描述】:
所以我知道我可以使用信号来自动创建一对一相关的实例。 (例如:Create OneToOne instance on model creation)。
我的情况是相关模型包含一个非空、非空白字段。
class Company(models.Model):
name = models.CharField()
class UserProfile(models.Model):
user = models.OneToOneField( settings.AUTH_USER_MODEL )
company = models.ForeignKey( Company )
@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_user_profile( sender, instance, created, **kwargs ):
if created:
UserProfile.objects.create(user=instance)
创建用户时,会触发create_user_profile。但这会导致错误Column company_id cannot be null。如何将company_id 传递给接收器?我需要在User 模型中创建自定义管理器吗?如果是这样,由于我可以在管理器中创建UserProfile,这是否会消除对信号的需求?
【问题讨论】:
-
是的,如果您需要始终在创建时设置公司,则不要使用信号。在任何情况下,您都应该考虑使用扩展的用户模型而不是单独的用户配置文件。
-
为什么扩展User模型更好?
-
因为这样您就根本不需要管理两个单独的模型,而且这些甚至都没有发挥作用。您可以使用与创建其余数据相同的方法添加公司。
标签: django django-models