【问题标题】:How to filter two model objects by time?如何按时间过滤两个模型对象?
【发布时间】:2011-05-24 01:08:44
【问题描述】:

models.py:

class Post(models.Model):
  msg=models.TextField("Shout it out!:")
  college=models.ForeignKey('College')
  time=models.DateTimeField(auto_now_add=True)

class Feed(models.Model):
  gender = models.CharField(max_length=5, choices=GENDER_CHOICES, default='girl')
  location=models.CharField(max_length=25, choices=LOCATION_CHOICES)
  msg = models.TextField("Message")
  email = models.EmailField("Email:",blank=True, null = True)
  college=models.ForeignKey('College')
  time=models.DateTimeField(auto_now_add=True)

在模板中,我希望在按时间过滤的流中同时显示提要和帖子。我该怎么做?我们如何按时间过滤两个模型对象?可能吗?需要帮忙。谢谢。

【问题讨论】:

  • 所以你想把两者结合起来,然后按时间排序?最后两者都应该显示在一个提要中?
  • 两者都出现在同一页面中.. 就像 facebook 新闻提要中的照片、cmets、视频 n al 如何按时间排序一起显示。
  • 请参阅下面 Joe J 的回答。在这种情况下,无论如何您都需要一个程序化的解决方案。没有简单的查询可以做这样的事情。

标签: python django django-models django-templates django-views


【解决方案1】:

您可以考虑创建一个包含公共字段的基类。然后,您可以执行类似于 BaseFeed.objects.all().order_by('time') 的查询并在模板中对其进行迭代,但您可以将每个结果项视为其真正的类型。

class BaseFeed(models.Model):
    ....
    msg = models.TextField("Message")
    college=models.ForeignKey('College')
    time=models.DateTimeField(auto_now_add=True)
    ....

这里有一些我在做类似事情时经常提到的 sn-ps。

http://www.djangosnippets.org/snippets/1034/

http://www.djangosnippets.org/snippets/1031/

http://adam.gomaa.us/blog/2009/feb/16/subclassing-django-querysets/

【讨论】:

    猜你喜欢
    • 2014-08-22
    • 1970-01-01
    • 2021-10-24
    • 2019-06-08
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多