Как получить все поля из моей модели в Django
Вот мой Model.py
class BlogModel(models.Model):
blog_id = models.AutoField(primary_key=True)
title = models.CharField(max_length=1000)
content = FroalaField()
user = models.ForeignKey(User, blank=True , null=True , on_delete=models.CASCADE)
image = models.ImageField(upload_to='public')
created_at = models.DateTimeField(auto_now_add=True)
upload_to = models.DateTimeField(auto_now=True)
Вот мой View.py
def my_blogs(request):
d = BlogModel.objects.all().filter(user = request.user)
return render(request,"my_blogs.html",{'message' : d})
Но когда я пытаюсь получить поля blog_id и created_at, выдается ошибка, что запрашиваемые поля отсутствуют в соответствующей таблице.
Но вы видите, что поле находится в самой таблице.
Помогите пожалуйста
Django Queryset d - это список объектов. Вы должны просмотреть его в цикле:
for each_blog in d:
each_blog.blog_id
Вот как вы получаете доступ к данным для набора запросов метода фильтрации.
BlogModel.objects.all().filter(user = request.user)
возвращает набор запросов, то есть список блогов, удовлетворяющих условиям.
Возможно, вы захотите перебрать все блоги, чтобы отобразить их, что можно сделать следующим образом:
{% for blog in d %}
{{ blog.blog_id }}
{% endfor %}
Try in views.py:
from .models import BlogModel
def my_blogs(request):
blogs = BlogModel.objects.all()
return render(request, 'my_blogs.html', locals())
В вашем html-шаблоне my_blog.html попробуйте следующее:
{% for b in blogs %}
{{ b.id }}: {{ b.created_at }}
{% endfor %}
Вы можете написать в views.py:
def my_blogs(request):
# filtered queryset for login user
queryset = BlogModel.objects.filter(user=request.user)
return render(request,"my_blogs.html",{'blogs': queryset})
и в шаблоне my_blogs.html:
{% for blog in blogs %}
{{ blog.id }}
{{ blog.created_at }}
{% endfor %}
BlogModel.objects.filter(user=request.user) возвращает queryset, который является списком объектов вашей модели. Вы можете получить доступ к объекту, итерируя queryset в шаблоне.