Python 德扬戈。主模型保存后,相关模型返回无
我有两种型号:Python 德扬戈。主模型保存后,相关模型返回无,python,django,django-models,django-signals,Python,Django,Django Models,Django Signals,我有两种型号:Item和Photo项目是照片的外键,因此一个项目可以连接多张照片,这很常见 项目类别: class Item(models.Model): name = models.CharField('Item Name', max_length = 150, null = False, blank = False ) description = RichTextField('Item Description') 摄影课: class Photo(models.Mo
Item
和Photo
<代码>项目是照片的外键,因此一个项目可以连接多张照片,这很常见
项目类别:
class Item(models.Model):
name = models.CharField('Item Name',
max_length = 150,
null = False,
blank = False
)
description = RichTextField('Item Description')
摄影课:
class Photo(models.Model):
path_and_rename = PathAndRename()
photo = models.ImageField(upload_to = path_and_rename, blank = True, null = True)
item = models.ForeignKey('Item', related_name = 'photo_set')
当我用一堆照片创建新的项目
条目时,我想做一些额外的事情:启动异步任务,为用户编制索引并发送电子邮件通知-一些异步任务()
。我正试图通过Item.save()
method:
def save(self):
super(Item, self).save()
some_async_task.delay(self.id)
@task(name="something")
def something(item_id):
print Item.objects.get(pk=item_id).photo_set.first().photo.url
项目模型的save()
方法似乎正是我所需要的,但问题是,即使在调用super()
之后,我也无法获得相关照片条目的数据,因为这种关系不存在
在创建项目条目并关联所有相关照片条目之后,运行方法的最佳方式是什么
post\u save
信号不能解决问题。因为项目
是主要模型,并且照片是相关的,这意味着当保存项目
时,它不一定与照片有关系
要知道这是何时发生的:
“在创建项目条目并关联所有相关照片条目后运行方法”
这取决于您的业务逻辑
你知道在你的视图中,所有的照片都是什么时候添加的吗
如果是:然后在视图代码中随时调用任务
如果否:
- 覆盖
(在每个新照片之后调用任务)Photo.save()
- 或者在您当前的任务代码中,添加一个检查是否有任何照片(在任何情况下,这可能都是值得添加的内容)
- 使用信号处理程序(
:)而不是重写post_save
save()
Item
对象上实际使用了post\u save
信号。结果相同。因此,似乎最好调整Photo.save()
方法或将post\u save
信号绑定到Photo
并在每次照片更新时运行任务。另外,我将sleep(10)
函数放在异步任务的顶部,所以在实际查询被传递到数据库的那个一刻,所有条目都被更新,关系被保存。它是有效的。但我仍然不喜欢这样的方法。在思考了一点(这总是必要的:)之后,很明显,这样的逻辑应该只进入视野。把所有的东西都放进模型中并链接信号是个坏主意。只有视图可以完全控制相关模型的流,所以我所需要的只是在item.save()之后将对异步任务的调用放入视图中。