2017-02-22 11 views
1

У меня есть сайт, использующий Django с моделью под названием 'CampaignProfile' - и аутентифицированные (зарегистрированные) пользователи могут создавать объект CampaignProfile через форму. После создания объект модели можно просмотреть на личной панели персональных компьютеров с проверкой подлинности. Однако, когда я вхожу в систему с другими учетными записями пользователей, то те же объекты модели можно просмотреть на личной панели, когда их не должно быть.Django - Объекты модели, созданные от одного пользователя, видимые для всех других пользователей

Как бы я указал, что только объекты, созданные данным пользователем, могут быть видны только этому пользователю (за исключением 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. Хотя я задал ForeignKey для моей CampaignProfile модели, которая будет связана с 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'] 

Любые предложения будут будь удивительным спасибо.

ответ

6

В CampaignProfile модели создают ForeignKey сопоставлен UserModel (или OneToOneField если каждый пользователь может создать только один экземпляр CampaignProfile).

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

Затем отфильтруйте экземпляры, связанные с зарегистрированным пользователем.

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

Это правильный ответ. В Django нет концепции разрешений на уровне строк, о которой просит запрашивающий. – themanatuf

 Смежные вопросы

  • Нет связанных вопросов^_^