你好,我正在测试Django User / AUTH与其他模型的嵌套。
我为我的用户创建了一个简单的模型MyProfil
。每次注册新的User
时,都会自动创建一个新的MyProfil
对象并链接到特定的User
。
models.py
#-- create a MyProfil.object for new user
@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_myprofil(sender, instance, created, **kwargs):
if created:
MyProfil.objects.create(owner=instance)
class MyProfil(models.Model):
# --- head
id = models.UUIDField(primary_key=True, default=uuid4, editable=False)
oblink = models.UUIDField(unique=True, default=uuid4, editable=False)
owner = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
# --- body
aboutme = models.TextField(max_length=300, blank=True)
city = models.TextField(max_length=300, blank=True)
问题
[Django Doc提到要使用dispatch_uid
来防止重复的内容发送。不幸的是,我不太了解如何应用dispatch_uid
,所以最终以这种方法接收了。
models.py
<...>
from django.core.signals import request_finished
#-- create a MyProfil.object for new user
@receiver(post_save, sender=settings.AUTH_USER_MODEL, dispatch_uid="my_unique_identifier")
def create_myprofil(sender, instance, created, **kwargs):
if created:
MyProfil.objects.create(owner=instance)
request_finished.connect(create_myprofil, dispatch_uid="my_unique_identifier")
<...>
所以我的问题是,这是否是应用dispatch_uid
的正确方法?
您应该使用dispatch_uid
以确保同一事件处理程序对于同一模型/事件永远不会被附加多次。
例如,考虑以下代码:
request_finished.connect(my_callback)
request_finished.connect(my_callback)
当触发request_finished
事件时,函数my_callback
被注册两次,因此将被调用两次。通过在连接回调时传递dispatch_uid
,可以避免这种情况。
request_finished.connect(my_callback, dispatch_uid="my_unique_identifier")
request_finished.connect(my_callback, dispatch_uid="my_unique_identifier")