[英]Django pre_save, instance is None
我正在編寫 pre_save 方法來為 model 創建 slug,由於某種原因,我的實例沒有。
@receiver(pre_save, sender=Employee)
def pre_save_employee_receiver(sender, instance, *args, **kwargs):
slug = slugify(" ".join([instance.name, instance.surname, instance.id]))
instance.slug = slug
錯誤是:
File "E:\Work\hire_handler\employees\models.py", line 60, in pre_save_employee_receiver
slug = slugify(" ".join([instance.name, instance.surname, instance.id]))
TypeError: sequence item 2: expected str instance, NoneType found
不, instance
不是None
,主鍵( instance.id
)是None
。
這很有意義,在數據庫端創建 object 之前,該項目沒有主鍵,因為數據庫調度了一個主鍵。
因此,如果您想使用主鍵,則需要使用post_save
項,而且id
很可能是一個 int,所以它仍然不起作用,因為' '.join()
不能連接整數。
您可以使用post_save
觸發器,然后再次保存,但這將導致在創建新Employee
時進行兩次查詢:
@receiver(post_save, sender=Employee)
def post_save_employee_receiver(sender, instance, created, *args, **kwargs):
if created:
instance.slug = slugify(f'{instance.name} {instance.surname} {instance.pk}')
instance.save()
此外,信號通常有點反模式,尤其是當您執行.bulk_create()
、 .update()
等時,信號不會被觸發。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.