2016-05-14 4 views
0

Может ли кто-нибудь объяснить, как я могу фильтровать сообщения пользователей, если пользователь является подписчиком или нет?Объект QuerySet не имеет атрибута 'subs'

объект 'QuerySet' имеет нет атрибута 'подлодки'

Я использую пользовательский пользователь

class Every(AbstractBaseUser): 
    user = models.OneToOneField(settings.AUTH_USER_MODEL, unique=True) 
    name = models.CharField(max_length=30, blank=True) 

Вот пост модель:

class Post(models.Model): 
    user = models.ForeignKey(User, blank=True, null=True) 
    text = models.TextField(max_length=1200) 

Абонентская модель:

class Sub(models.Model): 
    user = models.OneToOneField(User, related_name='user') 
    subs = models.ManyToManyField(User, blank=True, related_name='subs') 

Вид t шляпа, которую я пытаюсь использовать:

def tape(request, every_id): 
    context = {} 
    context.update(csrf(request)) 
    post_form = PostForm 
    pform = post_form 
    sub = Sub.objects.filter(subs=every_id)# here I get users that intersting for my user 
    tape = Post.objects.filter(user=sub.subs).order_by("-timestamp") 
    username = request.user 
    context = {"username": username, "pform": pform, "tape": tape, "sub": sub,} 
    return render(request, 'tape.html', context) 
+0

что это '' every_id? – Anoop

+0

every_id является идентификатором дополнительной модели для пользователя. '' 'class Every (AbstractBaseUser):' '' здесь я могу добавить адреса, хобби, имя ... –

ответ

1

На самом деле было бы лучше использовать вид класса. Но вот ответ с обычным взглядом. Нам нужно, чтобы получить подписку и идентификаторы-х абонентов, прежде чем мы начнем сообщение фильтра

здесь даже немного больше :-)

def get_user_id_list(user): 
    """Returns a list of subscribers's ids""" 
    try: 
     sub = user.user 
    Sub.DoesNotExist: 
     return [] 
    return sub.subs.all().values_list('user_id', flat=True) 


def get_user_id_list_2(user): 
    """Returns a list of subscription's ids""" 
    return user.subs.values_list('user_id', flat=True) 


def tape(request): 
    pform = PostForm 
    user_id_list = get_user_id_list_2(request.user) 
    logger.info('user_id_list = {}'.format(user_id_list)) 
    tape = Post.objects.filter(user_id__in=user_id_list).order_by("-timestamp") 
    username = request.user 
    context = { 
     "username": username, 
     "pform": pform, 
     "tape": tape, 
     "sub": sub, 
    } 
    return render(request, 'tape.html', context) 
Смежные вопросы