我想要一种简单的方法来将多个用户与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)
我和几个用户一起测试了它,它完成了我想要它做的事情。我只是想知道,这是否安全有效,足以用于生产? (我有一个在家庭服务器上运行的博客,但这与我的部署经验有关。)