将新记录添加到表时,我必须在外部数据库上执行SQL语句.此查询包括使用ManyToManyField.所以我只是连接这个函数:
post_save.connect(post_save_mymodel, sender=MyModel)
Run Code Online (Sandbox Code Playgroud)
在我的post_save_mymodel()函数中,这是我的工作:
def post_save_mymodel(sender, instance, created, *args, **kwargs):
if created:
for e in instance.my_m2mfield.all():
# Query including "e".
Run Code Online (Sandbox Code Playgroud)
但是,太糟糕了,instance.my_m2mfield.all()总是空的!即使它们应该包含一些元素!我试图通过这样做获得新元素
new_element = MyModel.objects.get(pk=instance.pk)
Run Code Online (Sandbox Code Playgroud)
但它没有改变任何东西,我仍然遇到同样的问题......
Wny的帮助/建议?
这是因为您首先保存您的实例,然后添加m2m关系.这就是ManyToMany字段在Django数据模型中的工作方式.Django需要知道应该与m2m关系相关的项目的ID.
我认为你的代码看起来像这样:
instance = MyModel.objects.create(some_field=some_value) # post save signal triggered here
instance.my_m2mfield = my_set_of_m2m_models
Run Code Online (Sandbox Code Playgroud)
您需要将处理程序连接到django.db.models.signals.m2m_changed信号.查看文档.例如:
def post_save_mymodel(sender, instance, action, reverse, *args, **kwargs):
if action == 'post_add' and not reverse:
for e in instance.my_m2mfield.all():
# Query including "e"
m2m_changed.connect(post_save_mymodel, sender=MyModel.my_m2mfield.through)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1690 次 |
| 最近记录: |