#python #django #django-models #django-views
Вопрос:
Вот мой 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, появится сообщение об ошибке, что запрошенные поля отсутствуют в соответствующей таблице.
Но вы можете видеть, что поле находится в самой таблице.
Пожалуйста, помогите, вот ошибка, которую я получаю, введите описание изображения здесь
Комментарии:
1. Может быть, ты забыл (
migrate
), если ударишь. Оставьте полученный код и сообщение об ошибке2. Правильно ли вы перенесли базу данных?
3. Я отредактировал сообщение с ошибкой, которую получаю
4.
d.blog_id
не имеет смысла, так как aQuerySet
— это набор объектов.5. Наверняка вы внесли некоторые изменения после первой миграции. Вы должны повторить команду «Сделать миграцию» и «перенести».
Ответ №1:
Набор запросов Django d-это список объектов. Вы должны пройти через это:
for each_blog in d:
each_blog.blog_id
Именно так вы получаете доступ к данным для набора запросов метода фильтрации.
Комментарии:
1. Спасибо, сэр, я попробую это сделать таким образом
Ответ №2:
BlogModel.objects.all().filter(user = request.user)
возвращает набор запросов, т. е. список блогов, удовлетворяющих условиям.
Возможно, вам захочется просмотреть все блоги, чтобы отобразить его, что можно сделать следующим образом:
{% for blog in d %}
{{ blog.blog_id }}
{% endfor %}
Ответ №3:
Попробуйте в 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 %}
Ответ №4:
Вы можете написать в 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(пользователь=запрос.пользователь) возвращает набор запросов, представляющий собой список объектов вашей модели. Вы можете получить доступ к объекту, выполнив итерацию набора запросов в шаблоне.