假设您有一个ForeignKey
MyModel.related_model
,并且这个related_model
包含所有字段-- null=True
或default=something
。
比如User.userprofile
,我在我的项目中使用了几个地方。在创建User
之后立即创建它更好吗?
无论是这样:
def save(...
super().save(...
UserProfile.objects.create(user=self)
或者这个:
@receiver(post_save...
def create_userprofile(...
UserProfile.objects.get_or_create(user=self)
或者当User
第一次进入“更新配置文件”页面时,我应该创建它吗?
是否有这样的模式(不包括某些特殊情况)?
发布于 2019-05-29 20:14:26
在Django中,默认情况下ForeignKey
字段不是可选的,因此除非UserProfile
是一个最终只在User
上存在的字段,最好在保存新创建的User
之前立即创建和分配它。您不应该使UserProfile
成为一个可选的ForeignKey
,除非它永远不会被创建,并且无限期地保持未设置。在需要时始终保证存在的可选字段将是一个令人困惑的模型定义。
如果UserProfile
是可选的,我仍然倾向于在它将要存在的情况下立即创建和设置。这样做可以防止项目中的任何开发人员在需要使用get
时使用get_or_create
,从而防止存在整个类型的bug。
我能想象不立即创建和设置它的唯一情况是,它的创建需要大量时间。在这种情况下,我可以使用Celery
或类似的框架异步执行。
https://softwareengineering.stackexchange.com/questions/391282
复制