我有两个模型:Item
和Photo
。 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
条目时,我还想做一些额外的工作:启动异步任务以进行索引和用户的电子邮件通知 - some_async_task()
。我试图通过Item.save()
方法来实现:
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()
之后我也无法获得有关相关照片条目的数据,因为这种关系不存在。< / p>
创建项目条目并且所有相关的照片条目相关后,运行方法的最佳方法是什么?
post_save
信号无法解决问题。
答案 0 :(得分:0)
由于Item
是主模型并且照片是相关的,这意味着当保存Item
时,它不一定与照片有关系。
知道何时发生这种情况: &#34;在创建项目条目并且所有相关的照片条目相关后运行方法&#34; 这取决于你的业务逻辑。
您是否知道在您的视图中何时添加了所有照片?
如果是:则在视图代码中调用该任务。
如果不是:
Photo.save()
(在每张新照片后调用任务)post_save
:https://docs.djangoproject.com/en/1.9/ref/signals/#django.db.models.signals.post_save)而不是覆盖save()