2017-02-22 8 views
1

「CampaignProfile」という名前のモデルを持つDjangoを使用するサイトがあり、認証済み(ログイン済み)のユーザーはフォームを通じてCampaignProfileオブジェクトを作成できます。作成されたモデルオブジェクトは、認証されたユーザーのパーソナルダッシュボードで表示できます。ただし、他のユーザーアカウントにログインすると、同じモデルオブジェクトがパーソナルダッシュボードに表示されません。Django - 他のすべてのユーザーから見える1人のユーザーから作成されたモデルオブジェクト

特定のユーザによって作成されたオブジェクトだけが、そのユーザだけが見ることができるように指定するにはどうすればよいですか(Django管理者を除く)。

dashboard.views.py:

def dashboard_main(request): 
    if request.user.is_authenticated: 
     all_campaigns = CampaignProfile.objects.all() 
     return render(request, 'dashboard-main.html', {'all_campaigns': all_campaigns}) 
    else: 
     return redirect('/users/login/?next=') 

オブジェクトを要求しているユーザーのみが自分自身を見ることができるように、私は変数「user=request.user.id」を作成したとき、私はすでに「user.CampaignProfile.objects.all()」を試してみました。ユーザーにはCampaignProfile属性がないというエラーが表示されます。

class UserModel(AbstractBaseUser): 
    user_email = models.EmailField(max_length=255, unique=True, verbose_name='Email Address') 
    user_fname = models.CharField(max_length=30, verbose_name='First Names') 
    user_lname = models.CharField(max_length=30, verbose_name='Last Name') 
    dt_joined = models.DateTimeField(auto_now_add=True) 
    dt_updated = models.DateTimeField(auto_now=True) 
    is_active = models.BooleanField(default=True) 
    is_admin = models.BooleanField(default=False) 
    objects = UserManager() 

    USERNAME_FIELD = 'user_email' 
    REQUIRED_FIELDS = ['user_fname','user_lname'] 

任意の提案になります。私はここに私のカスタム・ユーザー・モデル accounts.models.pyだ... UserModel(以下のモデル)に関連する私のCampaignProfileモデルに

をForeignKeyのを設定していますがすばらしいおかげです。 (各ユーザがCampaignProfileのインスタンスを1つだけ作成することができる場合、またはOneToOneFieldCampaignProfileモデルで

答えて

6

UserModelにマッピングForeignKeyを作成します。

class CampaignProfile(models.Model): 
    user = models.ForeignKey(UserModel) 
    # other fields 

ログインしたユーザーに関連するインスタンスをフィルタします。

all_campaigns = CampaignProfile.objects.filter(user=request.user) 
+0

これは適切な回答です。 Djangoには、リクエスタが要求している行レベルのパーミッションの概念はありません。 – themanatuf

関連する問題