我有一个使用Django的网站,该网站有一个名为' CampaignProfile' - 并且经过身份验证(已登录)的用户可以通过表单创建CampaignProfile对象。创建后,可以在经过身份验证的用户个人仪表板上查看模型对象。但是,当我登录其他用户帐户时,相同的模型对象可以在他们的个人仪表板上查看,而不应该是。
我如何指定只有该用户才能看到任何给定用户创建的对象(Django Admin除外)?
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.CampaignProfile.objects.all()
'当我创建变量' user=request.user.id
'这样请求对象的用户只能看到自己的对象;但是这会导致错误,说用户没有属性CampaignProfile。虽然我已将CampaignProfile模型的ForeignKey设置为与UserModel(以下模型)相关...
这是我的自定义用户模型 accounts.models.py:
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']
任何建议都会令人惊讶。
答案 0 :(得分:7)
在CampaignProfile
模型中,创建映射到ForeignKey
的{{1}}(如果每个用户只能创建一个UserModel
实例,则创建OneToOneField
。
CampaignProfile
然后过滤与登录用户相关的实例。
class CampaignProfile(models.Model):
user = models.ForeignKey(UserModel)
# other fields