Django - 从一个用户创建的模型对象,对所有其他用户可见

jay*_*ayt 2 python django

我有一个使用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=')
Run Code Online (Sandbox Code Playgroud)

我已经尝试' 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']
Run Code Online (Sandbox Code Playgroud)

任何建议都会很棒,谢谢.

nar*_*ary 7

CampaignProfile模型中创建ForeignKey映射到UserModel(或者OneToOneField如果每个用户只能创建一个实例CampaignProfile).

class CampaignProfile(models.Model):
    user = models.ForeignKey(UserModel)
    # other fields
Run Code Online (Sandbox Code Playgroud)

然后过滤与登录用户相关的实例.

all_campaigns = CampaignProfile.objects.filter(user=request.user)
Run Code Online (Sandbox Code Playgroud)

  • 你会惊讶于找到这样的答案是多么困难。 (2认同)