在Django中使用通用外键分配每个对象的权限

在Django中使用通用外键分配每个对象的权限,django,generics,permissions,Django,Generics,Permissions,我想用一种简单的方法将多个用户关联到Django中的一个帐户。我想我找到了一个解决办法,而且似乎很有效。我遇到了一些我现在正在尝试的更复杂的版本。我想知道是否有值得考虑的反对意见。现在我很高兴我的工作,但我与Django的经验仍然有限,所以欢迎任何反馈 以下两种模式: class Account(models.Model): related_users = generic.GenericRelation('RelatedUser') public = models.Boole

我想用一种简单的方法将多个用户关联到Django中的一个帐户。我想我找到了一个解决办法,而且似乎很有效。我遇到了一些我现在正在尝试的更复杂的版本。我想知道是否有值得考虑的反对意见。现在我很高兴我的工作,但我与Django的经验仍然有限,所以欢迎任何反馈

以下两种模式:

class Account(models.Model):

    related_users = generic.GenericRelation('RelatedUser')

    public = models.BooleanField(default=True)

    name = models.CharField(max_length=250)
    slug = models.SlugField(max_length=250)

    # Other fields....

    def __unicode__(self):
        return self.name

    # Get related user-id's and append them into a list
    def get_related_users(self):
        users = self.related_users.all()
        related = []
        for related_user in users:
            related.append(related_user.user_id)
        return related   

class RelatedUser(models.Model):

    content_type = models.ForeignKey(ContentType, related_name="user_relation")
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type', 'object_id')

    user = models.ForeignKey(User, null=True, blank=True, related_name='user_relation') 
下面是我的一个局部视图:

@login_required                            
def account_edit(request, account_id):
    account = get_object_or_404(Account, pk=account_id)
    users = account.get_related_users()
    if request.user.is_superuser or request.user.id in users:
        form = AccountForm(request.POST or None, instance=account)
        if form.is_valid():
            artist = form.save(commit=False)        
            artist.save()
            return redirect(account_list)
    else:
        return redirect(account_list)

我对几个用户进行了测试,它实现了我想要的功能。我只是想知道,这是否足够安全有效地用于生产?我有一个博客在家庭服务器上运行,但这是我的部署经验。

您使用的是通用关系。除了Account之外,还有什么内容类型与RelatedUser相关?目前没有,但我有3种不同类型的Account继承自Account。我认为这将是一个很好的方式来增加一些灵活性,用户可以访问不同的帐户。你应该提到这个或将帐户标记为抽象模型。所以我对你的代码没有任何批评。祝你好运!另外,更改相关用户id->related用户id。这不会影响db不必要的时间。谢谢你的提示,我每天都能学到一些东西。我编辑了我的问题和代码。另一方面:我使用从account继承的一个模型进行了测试,效果很好。