1

複数のユーザーを Django のアカウントに関連付ける簡単な方法が必要でした。私は解決策を見つけたと思います、そしてそれはうまくいっているようです。私が今試していることのより精巧なバージョンに出くわしました。検討に値する反論があるかどうか疑問に思っていました。今のところ、動作していることに満足していますが、Django の経験はまだ限られているため、フィードバックを歓迎します。

以下の 2 つのモデル:

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') 

次に、以下の私の(部分的な)ビューの1つ:

@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)

数人のユーザーでこれをテストしましたが、やりたいことができます。私はちょうど疑問に思っていました.これは本番環境で使用するのに十分安全で効率的ですか? (私はホームサーバーでブログを運営していますが、それは私の展開経験に関する限りです。)

4

0 に答える 0