2013-09-10 2 views
2

У меня есть модель для статуса. Он отображает весь статус красиво. Теперь я хочу показать все статус или действия конкретного пользователя на странице пользователя. Как я могу запросить все status и liked status для конкретного пользователя?как запросить пользователь для модели в django

Пожалуйста, исправьте меня, если я ошибаюсь. Я попробовал это в оболочке, но показывает пустой:

>>> from status.models import * 
>>> from django.contrib.auth.models import User 
>>> s = Status.objects.get(id=3) 
>>> s 
<Status: sdfjsdklsdf> 
>>> s.creator 
<User: [email protected]> 
>>> u = User.objects.get(id=6) 
>>> u 
<User: [email protected]> 
>>> u.status_set.all() 
[] 
>>> 

Вот мой models.py:

from django.db import models 
from django.contrib.auth.models import User 
from datetime import datetime 
from time import time 


def get_upload_file_name(instance, filename): 
    return "uploaded_files/%s_%s" %(str(time()).replace('.','_'), filename) 

class Status(models.Model): 
    status = models.TextField() 
    image = models.ImageField(upload_to=get_upload_file_name, blank=True) 
    pub_date = models.DateTimeField(default=datetime.now) 
    creator = models.ForeignKey(User, related_name="creator_set") 
    likes = models.ManyToManyField(User, through="Like") 

    class Meta: 
     ordering = ['-pub_date'] 
     verbose_name_plural = ('Status') 

    def __unicode__(self): 
     return self.status 

class Like(models.Model): 
    status = models.ForeignKey(Status) 
    liked = models.ForeignKey(User) 
    liked_date = models.DateTimeField(default=datetime.now) 

    def __unicode__(self): 
     return "%s likes %s" % (self.liked, self.status) 

Пожалуйста, проверьте и наставит меня. Спасибо!

ответ

1

Оно должно быть:

u.creator_set.all() 

Обратите внимание, вы поставили related_name=creator_set на FK.

Отредактировано: Получить Like для пользователя:

u.like_set.all() 

И если вы хотите, соответствующий статус любит:

[each.status for each in u.like_set.all()] 
+0

Спасибо, и как я могу запросить статус понравившегося вам пользователя? – Robin

+0

Спасибо! Кстати, пожалуйста, объясните мне последнюю строчку. – Robin

+0

Вы получаете все объекты 'Like' для пользователя, а затем выполняете понимание списка, чтобы получить статус для каждого экземпляра' Like'. –

1
Status.objects.filter(creator__id=6) 
Like.objects.filter(liked__id=6) 
+0

Спасибо! Как я могу выполнить запрос для зарегистрированного пользователя? – Robin

+0

if request.user.is_authenticated(): Status.objects.filter (creator = request.user) –

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