[英]How to get the content from my database in views.py? [Django]
我正在尝试从我的数据库中打印content
字段,这是我的models.py
文件:
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
read_time = models.TimeField(null=True, blank=True)
view_count = models.IntegerField(default=0)
这是我的views.py
文件:-
class PostDetailView(DetailView):
model = Post
def get_object(self):
obj = super().get_object()
obj.view_count += 1
obj.save()
return obj
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
all_texts = {
'texts': context.content
}
print(all_texts[texts])
return context
我试图从我的数据库中访问content
字段中的所有数据,但上述方法不起作用,有什么方法可以访问content
字段中的所有数据,因为我必须对这些字段执行一些操作,就像根据内容的长度计算任何内容的read_time
一样。
只需查询所有对象并循环查询集以根据您的需要操作它们,如下所示:
def your_view(self, **kwargs):
# Get all table entries of Model Post
queryset = Post.objects.all()
# Loop each object in the queryset
for object in queryset:
# Do some logic
print(object.content)
[...]
return (..., ...)
你不必重写.get_queryset(…)
方法[Django的DOC]为,由于对象已经传递到环境。 您可以简单地在模板中渲染它:
{{ object.content }}
如果您在上下文中确实需要这个,您可以将其实现为:
class PostDetailView(DetailView):
model = Post
# …
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context.update(
texts=self.object.content
)
return context
如果您需要所有帖子对象,您可以将这些添加到上下文中:
class PostDetailView(DetailView):
model = Post
# …
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context.update(
texts=self.object.content,
posts=Post.objects.all()
)
return context
并将这些渲染为:
{% for post in posts %}
{{ post.content }}
{% endfor %}
在增加视图计数器以避免竞争条件时,最好使用F
表达式 [Django-doc] :
class PostDetailView(DetailView): model = Post def get_object(self): obj = super().get_object() views = obj.view_count obj.view_count = F('view_count') + 1 obj.save() obj.view_count =视图+1返回对象
首批进口车型
from . models import Post
然后在你的函数中
data=Post.objects.values('content').all()
现在数据具有内容字段中的所有值 data=[{'content':first_value},{'content':second_value},..like this...]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.