求教,如何设置 ManyToManyField 的默认值?

2017-09-15 00:13:06 +08:00
 tinypig
class Permission(models.Model):
    is_default = models.BooleanField('是否默认')
    group = models.ForeignKey('Group')

class Post(models.Model):
    group = models.ForeignKey('Group')
    permissions = models.ManyToManyField('Permission')
    title = models.CharField('Title', max_length=32)
    

希望在 Post 创建时,根据 group 设置默认的 permissions,但是尝试使用 signal 的方式设置保存后并未生效。

@receiver(post_save, sender=Post)
def set_default_permissions(sender, instance, created, *args, **kwargs):
    if instance.group is not None and created:
        defaults = Permission.objects.filter(is_default=True, group=instance.group).all()
        instance.product.add(*defaults)
        instance.save()

请教一下,应该如何在创建 Post 时设置 permissions 才是最好的呢?

3313 次点击
所在节点    Django
4 条回复
tinypig
2017-09-15 09:52:07 +08:00
Google 了一晚上找不到答案。。
cocoakekeyu
2017-09-15 10:08:29 +08:00
你得调式一下,确定 post 保存后注册的函数会执行
tinypig
2017-09-15 10:11:46 +08:00
@cocoakekeyu 我调试过,set_default_permissions 确实是执行了的,但是 Post.permissions 还是为空。
tinypig
2017-09-15 11:09:34 +08:00
@cocoakekeyu 我发现是在 Django admin 中创建就没有,但是自己手动 create 的就没问题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/390813

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX