2016-05-14 21 views
0

Kann jemand erklären, wie ich Benutzer Beiträge filtern kann, wenn Benutzer Abonnent ist oder nicht?'QuerySet' Objekt hat kein Attribut 'Subs'

Objekt 'QuerySet' hat kein Attribut 'subs'

verwende ich benutzerdefinierte

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

Hier Post Modell:

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

Ein Subscriber-Modell:

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

Ein Blick t Hut ich versuche zu verwenden:

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

was starten ist das '' every_id? – Anoop

+0

every_id ist die ID eines zusätzlichen Modells für den Benutzer. '' 'Klasse Every (AbstractBaseUser):' '' Hier kann ich Adressen, Hobbies, Namen hinzufügen ... –

Antwort

1

eigentlich wäre es besser, eine Klassenansicht zu verwenden. Aber hier ist eine Antwort mit einer üblichen Ansicht. Wir brauchen ids Abonnements und Abonnenten des erhalten, bevor wir Filter Beiträge

hier ist sogar ein bisschen mehr :-)

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) 
Verwandte Themen