gpt4 book ai didi

django m2m_changed 信号通过模型自定义

转载 作者:行者123 更新时间:2023-12-02 09:38:06 24 4
gpt4 key购买 nike

我正在尝试使用 m2m_changed signal触发我的应用程序中的一些操作。但是,signaltest() 的打印输出表明我仅在 pre_clearpost_clear 操作上收到信号。我的 models.py 看起来像这样:

class Entry(models.Model):
objects = managers.MyEntryManager()
...
fields = models.ManyToManyField('Field', through='EntryField')

class Field(models.Model):
name = models.CharField(max_length=64, unique=True)
description = models.CharField(max_length=256, blank=True)

class EntryField(models.Model):
entry = models.ForeignKey('Entry')
field = models.ForeignKey('Field')
value = models.CharField(max_length=256)

def signaltest(**kwargs):
print kwargs['action']
signals.m2m_changed.connect(signaltest, sender=Entry.fields.through, weak=False, dispatch_uid='signaltest')

EntryField 对象是使用以下代码在代码中的其他位置创建的:

some_entry.fields.clear()
models.EntryField.objects.get_or_create(
entry=some_entry,
field=some_field,
defaults = { 'value': field_value }
)

第一个调用负责我收到的 pre_clearpost_clear 事件。但是,第二次调用不会生成任何信号。

在我看来django bug #13757与这种(错误)行为有关,但我可能遗漏了一些东西。

有没有办法“重新连接”信号(也许使用除 m2m_changed 之外的其他信号),以便在 EntryField 时生成 post_save 信号> 已创建?

最佳答案

你能尝试一下吗?

def signaltest(**kwargs):
print kwargs['instance']
print kwargs['created']

signals.post_save.connect(signaltest, sender=EntryField, weak=False, dispatch_uid='signaltest')

关于django m2m_changed 信号通过模型自定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12689721/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com