我的博客应用程序中有两个相互关联的模型;类别和职位。博客首页显示了帖子列表及其相应的元数据,就像应该的那样;相当标准的东西。
除了在首页上显示帖子外,它们还以简短形式(仅是类别和标题)显示在个人用户的个人资料页面上。
我感兴趣的是对属于某个类别的所有帖子进行排序,但是我设法使其起作用的唯一方法是:
新闻 一些头衔 新闻 另一个标题 蟒蛇 另一个任意标题 新闻 另一个标题
我想对它进行排序:
新闻 一些头衔 另一个标题 又一个标题 蟒蛇 另一个任意标题
A,当我尝试提出一种方法时,我的脑子一直变成一碗意大利面,所以事不宜迟。我应该怎么做呢? 我认为从帖子的元数据中调用类别只是为了尝试通过检索到的数据对帖子进行分类还有些不足,但是除此之外,我还是有些迷茫。
这是来自user_profile.html的模板代码段:
{% if user.post_set.exists %}
<p>
{% for post in user.post_set.all|dictsortreversed:"date_posted" %}
<span style="margin-right: 5px; padding: 3px 6px; border-radius:12px; color:#FFF; background-color:#FFA826;">{{ post.category }}</span><br/>
<a style="margin-left:3px;" href="{% url 'blog:post-detail' post.slug %}">{{ post.title|truncatechars_html:30 }}</a><br/>
{% endfor %}
</p>
{% endif %}
模型:
class Category(models.Model):
class Meta:
verbose_name = 'category'
verbose_name_plural = 'categories'
name = models.CharField(max_length=30)
def __str__(self):
return self.name
class Post(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=60)
category = models.ForeignKey(Category, blank=True, null=True, on_delete=models.CASCADE)
content = RichTextUploadingField(
external_plugin_resources=[(
'youtube',
'/static/ckeditor/ckeditor/plugins/youtube/',
'plugin.js'
)],
blank=True,
null=True,
)
date_posted = models.DateTimeField(default=timezone.now)
updated = models.DateTimeField(auto_now=True)
slug = models.SlugField(max_length=70, blank=True, null=True, help_text='<font color="red">don\'t. touch. the. slug. field. unless. you. mean. it.</font> (it will auto-generate, don\'t worry.)')
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('blog:post-detail', kwargs={'slug': self.slug})
最后是与post_list.html相关的视图:
class PostListView(ListView):
model = Post
template_name = 'blog/home.html'
context_object_name = 'posts'
ordering = '-date_posted'
paginate_by = 6
我想知道我应该以完全不同的方式来做吗?如果是这样,什么被认为是“最佳实践”?
谢谢:)
答案 0 :(得分:0)
您可以在模型中添加顺序:
public class MyFragment extends Fragment implements SearchActivity.goBack{
@Override
public boolean canGoBack() {
if (webView.canGoBack()) {
webView.goBack();
return true;
}
return false;
}
有关更多详细信息,请参见documentation:
为此最好使用custom manager:
class Post(models.Model):
...
class Meta:
ordering = ['category', '-date_posted']
用法:
from django.db import models
class CustomManager(models.Manager):
# subclass model manager
def custom_category_dict(self, **kwargs):
# add a new method for building a dictionary
nDict = dict()
for i in self.get_queryset().filter(**kwargs): # filter queryset based on keyword argument passed to this method
current_list = nDict.get(i.category.name, [])
current_list.append(i)
nDict.update({i.category.name: current_list})
return nDict
class Posts(models.Model):
# override posts model with manager
objects = CustomManager()