可以用相同的方法重新保存Django对象吗

可以用相同的方法重新保存Django对象吗,django,django-models,django-views,celery,Django,Django Models,Django Views,Celery,我有一个django函数,我在同一个函数中保存对象两次。因为我需要.delay(python芹菜)函数中对象的id。使用.save()两次可以吗,还是不好的做法: def some_function(request, emailname, emailbody): email = Email() email.name = emailname email.save() email_id = email.id celery_task = send_email.

我有一个django函数,我在同一个函数中保存对象两次。因为我需要
.delay
(python芹菜)函数中对象的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存储到芹菜任务中,然后将芹菜id存储回电子邮件对象中


如果芹菜出了问题,您也可以重新发送电子邮件。

使用这种方式是可以的,因为您需要将电子邮件id存储到芹菜任务中,然后将芹菜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

创建
的理想方法是,对象创建进入
init
并为发送电子邮件添加类方法
send\u email
,我的意见是将此函数分解为2,划分责任。一个功能是创建电子邮件对象,另一个功能是发送电子邮件。这是必要的,因为有时您可能需要执行“仅发送电子邮件”或“仅创建电子邮件对象”之类的任务,此时您需要创建另一个函数或在此函数中放入一些
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

创建
的理想方法是,对象创建进入
init
并添加用于发送电子邮件的类方法
send\u email

我知道您的方法可以更好地将其分为两个功能。但是,您能否评论一下,如我在函数中所做的那样,两次保存同一实例是否没有技术问题?技术问题是-额外的数据库\存储调用以保存数据,但如果需要,则必须这样做。我知道您的方法可以更好地将其拆分为两个函数。但是,您能否评论一下,如我在函数中所做的那样,两次保存同一实例是否没有技术问题?技术问题是-额外的数据库\存储调用以保存数据,但如果需要,则必须这样做。