2017-05-24 13 views
0

私はオンラインフォーラムを構築しようとしています。今、私のフォーラムモデルにはいくつかの属性があり、そのうちの1つは「所有者」です。これはこのフォーラムを作成したユーザーのForeignKeyです。また、所有者がフォーラムを作成するたびに、適切なパスコードを持つ他のユーザーだけがフォーラムに参加できるようにパスコードを入力する必要があることを確認する別の属性「パスコード」もあります。今、私はユーザーが既存のフォーラムに参加することを選択できるような新しい機能を実装しようとしています。しかし、私は立ち往生しています。djangoモデル属性フィールド空リスト

1)私の最初の問題は、カスタムパーミッションを作成するために、まずパーミッションを持つユーザーのリストを含む別のモデル属性が必要であるということです。私はモデルの属性を空のリスト、つまりユーザーがフォーラムに参加して正しいパスコードを要求するたびに、彼/彼女のユーザー名がリストに追加され、次に私のビューに追加されるように、permissioned_users = []を考えていました。 py @ user_passes_testを使って、request.user.usernameがリストにあるかどうかを調べることができます。しかし、私は "students = []"が "anyparticularinstance"を行うことができるように動作するかどうかはわかりません.students.append( "彼の名前")が動作します。

2)私はどのようにして参加フォーラム機能を作成しますか?私はフォーラム作成機能を完全に実装しましたが、既存のフォーラムにユーザーを参加させるにはどうすればいいですか?ありがとうございました!

+0

モデルを投稿すると役立ちます。 –

答えて

0

テキストフィールドを使用し、フィールドを更新するたびにテキストフィールドの最後に追加することで、目的を達成できます。

モデル:

permissioned_users = models.TextField(blank=True, null=True) 

ビュー:

foo = Forum.objects.get(id=id) 
temp = foo.permissioned_users 
temp = temp+" username" 
foo.permissioned_users = temp 
foo.save() 

は明らかにあなたは、元のいくつかのより多くの仕事をしなければなりません。どのユーザにパーミッションが与えられているかチェックしたいときは、空白を使って文字列を分割します(str.split())ので、簡単に繰り返し処理して確認することができます。あなたがアクセス権を達成することができます

1

一つの方法は、例えば、モデル内でのブールフィールドを定義することである:

class Forum(AbstractBaseUser): 
    username=models.CharField(max_length=20,unique=True) 
    name = models.CharField(max_length=20) 
    email = models.EmailField(max_length=254,null=True,blank=True) 
    is_active = models.BooleanField(default=True) 
    is_admin = models.BooleanField(default=False) 
    is_staff = models.BooleanField(default=False) 

ジャンゴでAbstractBaseUserを拡張することにより、あなたは、デフォルトの管理者からusers.Eitherのカスタム権限を定義することができますDjangoが提供しているか、あなた自身のカスタム管理者かもしれませんが、特定のユーザに権限を追加または削除することができます。詳細については、次のリンクを参照してください。Django AbstractBaseUser

関連する問題