姜戈。主模型保存后的相关模型 returns None
Django. Related model returns None after primary model save
我有两个模型:Item
和 Photo
。 Item
是 Photo
的外键,因此一个项目可以连接多张照片,这很常见。
项目 class:
class Item(models.Model):
name = models.CharField('Item Name',
max_length = 150,
null = False,
blank = False
)
description = RichTextField('Item Description')
照片 class:
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
Item 模型的 save()
方法似乎正是我所需要的,但问题是即使在调用 super()
之后我也无法获取相关照片条目的数据,因为这种关系不存在.
在创建项目条目并且关联所有相关照片条目后,运行 方法的最佳方法是什么?
post_save
信号无法解决问题。
由于Item
是主模型,照片是相关的,也就是说Item
保存的时候不一定和照片有关系。
要知道这是什么时候发生的:
"to run method after Item entry was created and all related Photo entries were related"
取决于您的业务逻辑。
在您看来,您是否知道添加完所有照片的确切时间?
如果是:然后在您的视图代码中当场调用任务。
如果没有:
- 要么覆盖
Photo.save()
(在每张新照片后调用任务)
- 或者在您当前的任务代码中,添加检查是否有任何照片(无论如何这可能是值得添加的)
- 使用信号处理程序 (
post_save
: https://docs.djangoproject.com/en/1.9/ref/signals/#django.db.models.signals.post_save) 而不是覆盖 save()
我有两个模型:Item
和 Photo
。 Item
是 Photo
的外键,因此一个项目可以连接多张照片,这很常见。
项目 class:
class Item(models.Model):
name = models.CharField('Item Name',
max_length = 150,
null = False,
blank = False
)
description = RichTextField('Item Description')
照片 class:
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
Item 模型的 save()
方法似乎正是我所需要的,但问题是即使在调用 super()
之后我也无法获取相关照片条目的数据,因为这种关系不存在.
在创建项目条目并且关联所有相关照片条目后,运行 方法的最佳方法是什么?
post_save
信号无法解决问题。
由于Item
是主模型,照片是相关的,也就是说Item
保存的时候不一定和照片有关系。
要知道这是什么时候发生的: "to run method after Item entry was created and all related Photo entries were related" 取决于您的业务逻辑。
在您看来,您是否知道添加完所有照片的确切时间?
如果是:然后在您的视图代码中当场调用任务。
如果没有:
- 要么覆盖
Photo.save()
(在每张新照片后调用任务) - 或者在您当前的任务代码中,添加检查是否有任何照片(无论如何这可能是值得添加的)
- 使用信号处理程序 (
post_save
: https://docs.djangoproject.com/en/1.9/ref/signals/#django.db.models.signals.post_save) 而不是覆盖save()