V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tinypig
V2EX  ›  Django

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

  •  
  •   tinypig · 2017-09-15 00:13:06 +08:00 · 3110 次点击
    这是一个创建于 2387 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 才是最好的呢?

    4 条回复    2017-09-15 11:09:34 +08:00
    tinypig
        1
    tinypig  
    OP
       2017-09-15 09:52:07 +08:00
    Google 了一晚上找不到答案。。
    cocoakekeyu
        2
    cocoakekeyu  
       2017-09-15 10:08:29 +08:00   ❤️ 1
    你得调式一下,确定 post 保存后注册的函数会执行
    tinypig
        3
    tinypig  
    OP
       2017-09-15 10:11:46 +08:00
    @cocoakekeyu 我调试过,set_default_permissions 确实是执行了的,但是 Post.permissions 还是为空。
    tinypig
        4
    tinypig  
    OP
       2017-09-15 11:09:34 +08:00
    @cocoakekeyu 我发现是在 Django admin 中创建就没有,但是自己手动 create 的就没问题。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   982 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:58 · PVG 05:58 · LAX 14:58 · JFK 17:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.