在Django中,如何使用中间模型在多对多关系模型中触发信号?

时间:2018-08-01 15:38:04

标签: python django

我想在具有中间模型的多对多关系模型中添加项目时触发信号。

这些是下面的模型。

class Page(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    url = models.TextField('Website Page URL', null=False, blank=False, unique=True)
    site = models.ForeignKey(Site, related_name='pages', on_delete=models.CASCADE)


class Link(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    url = models.CharField('Page Link', max_length=600, null=False, blank=False, unique=True)
    pages = models.ManyToManyField(Page, related_name='links', through='PageLinkAssociation')


class PageLinkAssociation(models.Model):
    page = models.ForeignKey(Page, on_delete=models.CASCADE)
    link = models.ForeignKey(Link, on_delete=models.CASCADE)

在这些模型类上可以看到, Page Link 类的url字段是unique

下面的代码段代表了我向这三个表中添加项目的方式。

links = kwargs.get('links', None)
for link in links:
    try:
        link_obj = PageLink.objects.create(url=link)
        PageLinkAssociation.objects.create(page=page, link=link_obj)
    except IntegrityError:
        link_obj = PageLink.objects.get(url=link)
        PageLinkAssociation.objects.create(page=page, link=link_obj)

通过这种方式,可以将项目正确地添加到表中。

我担心的是,我想在每个link_obj添加到 Link 表之后触发信号。

我已经看到 post_save 无法正常工作。

Django文档告诉我,我应该使用 m2m_changed 进行m2m关系,但是我不确定这是正确的方法。

0 个答案:

没有答案