gpt4 book ai didi

Django - 如何将查询合并为一个并将其显示在模板中?

转载 作者:行者123 更新时间:2023-12-05 01:26:41 24 4
gpt4 key购买 nike

假设这是一个应用程序博客的模型:

class Blog(models.Model):
title = models.CharField(max_length=200)
pub_date = models.DateTimeField(default=datetime.now)
creator = models.ForeignKey(User)
content = BleachField()

这是应用状态的另一种模型:

class Status(models.Model):
content = BleachField()
pub_date = models.DateTimeField(default=datetime.now)
creator = models.ForeignKey(User)

我怎么想出这样的东西:

from blog.models import Blog
from status.models import Status

blog = Blog.objecs.all()
status = Status.objects.all()
all = blog | status

并在模板中显示用户的所有更新。

updates = user.all_set.all()

编辑:

所以在模板中我可以做这样的事情:

{% for each in all %}
....
{% endfor %}

我不想要的是,在首页,我想按最新顺序显示所有用户事件的更新,

例如:

'User updated with new status: blah blah'
'User published a new Blog'
'User published a new Blog'

就像许多其他社交网站一样。并且不要将它们分开显示。同样在用户的个人资料中,显示该特定用户的所有事件。

最佳答案

你应该为此使用 django 代理模型,这里是 documentation .

这是一个例子:

class BlogAndStatus(models.Model):
title = models.CharField(max_length=200)
pub_date = models.DateField()
creator = models.ForeignKey(User)
content = models.TextField()
is_blog = models.BooleanField(default=False)
is_status = models.BooleanField(default=False)


class BlogManager(models.Manager):
def get_query_set(self):
return super(BlogManager, self).get_query_set().filter(is_status=True)


class Blog(BlogAndStatus):
objects = BlogManager()

class Meta:
proxy = True

def save(self, *args, **kwargs):
self.is_blog = True
return super(Blog, self).save(*args, **kwargs)


class StatusManager(models.Manager):
def get_query_set(self):
return super(StatusManager, self).get_query_set().filter(is_blog=True)


class Status(BlogAndStatus):
objects = StatusManager()

class Meta:
proxy = True

def save(self, *args, **kwargs):
self.is_status = True
return super(Status, self).save(*args, **kwargs)

您可以通过以下方式获取所有对象:

BlogAndStatus.objects.all()

或者,使用管理器,只是 Status with:

Status.objects.all()

您可以在 forms.py 中使用常规模型表单,只需确保将字段“is_blog”或“is_status”设置为 True。博客示例:

class BlogForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(BlogForm, self).__init__(*args, **kwargs)
self.initial['is_blog'] = True

class Meta:
model = Blog
fields = ('title', 'content', 'is_blog')
widget = {'is_blog': forms.HiddenInput()}

关于Django - 如何将查询合并为一个并将其显示在模板中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19752520/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com