Я работаю над многопользовательским rss-ридером. Я хочу ограничить отображение сообщений только теми, которые не прочитаны. Мне удалось сделать это в моем единственном представлении «feed», как показано ниже, но я не могу понять, как сделать то же самое в нескольких каналах aka «категория».отношения модели Django во взглядах и шаблонах
Я пытался что-то вроде здесь https://docs.djangoproject.com/en/1.5/topics/db/queries/#spanning-multi-valued-relationships, но он не работает для меня
я должен изменить свой «категории» просмотр кода или шаблон кода? и если да, как бы вы это сделали?
спасибо! -S
модели
class UserCategory(models.Model):
name = models.CharField(unique=False, max_length=64)
user = models.ForeignKey(User)
slug = AutoSlugField(populate_from='name', always_update='True', unique_with='user')
class Feed(models.Model):
feed_url = models.URLField(unique=True)
default_title = models.CharField(max_length=64, blank=True)
link = models.URLField(blank=True)
class UserFeed(models.Model):
feed = models.ForeignKey(Feed)
title = models.CharField(max_length=64)
category = models.ForeignKey(UserCategory)
user = models.ForeignKey(User)
slug = AutoSlugField(populate_from='title', always_update='True', unique_with='user')
class Post(models.Model):
feed = models.ForeignKey(Feed)
title = models.CharField(max_length=256)
content = models.TextField()
link = models.URLField(max_length=512)
class ReadPost(models.Model):
user = models.ForeignKey(User)
post = models.ForeignKey(Post)
просмотров
def feed(request, user_feed_slug):
user_feed = get_object_or_404(UserFeed.objects.filter(slug=user_feed_slug, user=request.user))
read_post = ReadPost.objects.filter(user=request.user).values_list('post')
posts = Post.objects.select_related().filter(feed=user_feed.feed).exclude(id__in=read_post)
def category(request, user_category_slug):
user_category = get_object_or_404(UserCategory.objects.filter(slug=user_category_slug, user=request.user))
шаблоны
feed
{% for post in posts %}
{{ post.title }}
{% endfor %}
category
{% for feed in user_category.userfeed_set.all %}
{{ feed.title }}
{% for post in feed.feed.post_set.all %}
{{ post.title }}
{{ post.content }}
{% endfor %}
{% endfor %}
Я не был знаком с настраиваемыми фильтрами. Я не уверен, как его реализовать сейчас? Должен ли я помещать его здесь: {% для фида в user_category.userfeed_set.all | непрочитанный%} или здесь {% для сообщения в feed.feed.post_set.all | непрочитанный%} ?? также мне следует добавить некоторые дополнительные аргументы, такие как непрочитанные: сообщения? Я пытаюсь использовать все эти параметры, но, похоже, не работает :( – sikor
Вы должны применить этот фильтр к сообщению «Задать запрос» и дополнительно пропустить чтение пользователями сообщений. Поэтому в этом примере это может быть примерно так: '{% for post в feed.feed.post_set.all | непрочитанные: read_posts%} '. –
После того, как последующая настройка работала как шарм! Dzieki :) – sikor