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