Как получить все поля из моей модели в Django

#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 не имеет смысла, так как a QuerySet — это набор объектов.

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(пользователь=запрос.пользователь) возвращает набор запросов, представляющий собой список объектов вашей модели. Вы можете получить доступ к объекту, выполнив итерацию набора запросов в шаблоне.