Django的。主模型保存

时间:2016-02-26 08:27:53

标签: python django django-models django-signals

我有两个模型:ItemPhotoItemPhoto的外键,因此一个项目可以连接很多照片,这很常见。

项目类:

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信号无法解决问题。

1 个答案:

答案 0 :(得分:0)

由于Item是主模型并且照片是相关的,这意味着当保存Item时,它不一定与照片有关系。

知道何时发生这种情况: &#34;在创建项目条目并且所有相关的照片条目相关后运行方法&#34; 这取决于你的业务逻辑。

您是否知道在您的视图中何时添加了所有照片?

如果是:则在视图代码中调用该任务。

如果不是: