你能用同样的方法重新保存一个 Django 对象吗
Can you resave a Django object in same method
我有一个 django 函数,我在同一个函数中保存对象两次。因为我需要我的 .delay
(python celery) 函数中对象的 id。使用 .save()
两次是否可以,还是不好的做法:
def some_function(request, emailname, emailbody):
email = Email()
email.name = emailname
email.save()
email_id = email.id
celery_task = send_email.delay(email_id, emailbody)
email.celery_task_id = celery_task.id
email.save()
使用这种方式是可以的,因为您需要将电子邮件 ID 存储到 celery 任务中,然后将 celery id 存储回电子邮件对象。
如果芹菜出现问题,您也可以重新发送电子邮件。
我的意见是把这个功能一分为二,分担责任。一个功能是创建电子邮件对象,另一个功能是发送电子邮件。这是必要的,因为有时您可能需要执行任何一项任务,例如仅发送电子邮件或仅创建电子邮件对象,此时您需要创建另一个函数或在此函数中放置一些 if..else
def some_function(request, emailname):
email = Email()
email.name = emailname
email.save()
return email.id
def send_email(email_id, emailbody):
celery_task = send_email.delay(email_id, emailbody)
email.celery_task_id = celery_task.id
email.save()
return email
创建 class
的理想方式,对象创建进入 init
并添加 class 方法 send_email
用于发送电子邮件
我有一个 django 函数,我在同一个函数中保存对象两次。因为我需要我的 .delay
(python celery) 函数中对象的 id。使用 .save()
两次是否可以,还是不好的做法:
def some_function(request, emailname, emailbody):
email = Email()
email.name = emailname
email.save()
email_id = email.id
celery_task = send_email.delay(email_id, emailbody)
email.celery_task_id = celery_task.id
email.save()
使用这种方式是可以的,因为您需要将电子邮件 ID 存储到 celery 任务中,然后将 celery id 存储回电子邮件对象。
如果芹菜出现问题,您也可以重新发送电子邮件。
我的意见是把这个功能一分为二,分担责任。一个功能是创建电子邮件对象,另一个功能是发送电子邮件。这是必要的,因为有时您可能需要执行任何一项任务,例如仅发送电子邮件或仅创建电子邮件对象,此时您需要创建另一个函数或在此函数中放置一些 if..else
def some_function(request, emailname):
email = Email()
email.name = emailname
email.save()
return email.id
def send_email(email_id, emailbody):
celery_task = send_email.delay(email_id, emailbody)
email.celery_task_id = celery_task.id
email.save()
return email
创建 class
的理想方式,对象创建进入 init
并添加 class 方法 send_email
用于发送电子邮件