Получение объекта <django.db.models.query_utils.DeferredAttribute по адресу 0x1069ce0d0> вместо значений

Я хочу записать все поля модели в текстовый файл, но получаю следующее. Как я могу это исправить. Я делаю форму регистрации пациента и после регистрации хочу видеть все поля модели в текстовом файле. Этот код работает, я получаю текстовый файл, но вместо значения у меня отложенный атрибут. Где моя ошибка?

Это мой model.py

from django.db import models
from django.contrib.auth.models import User
from django.urls import reverse
#from datetime import datetime, date

class Post(models.Model):
    
    #post_date = models.DateField(auto_now_add = True)
    soru1 = models.CharField(verbose_name='Ad Soyad',max_length=10000, default="")
    soru2 = models.CharField(verbose_name='Tarih', max_length=10000, default="")
    soru3 = models.CharField(verbose_name='Doğum Tarihi', max_length=10000, default="")
    soru4 = models.CharField(verbose_name='Doğum Yeri', max_length=10000, default="")
    soru5 = models.CharField(verbose_name='Medeni Hali', max_length=10000, default="")

Это мой views.py

from django.shortcuts import render
from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView
from .models import Post
from .forms import PostForm
from django.urls import reverse_lazy
from django.db.models import Q
from django.http import HttpResponse
from django.core.files import File



#Dosya Kaydetme

def writetofile(request):
    f = open('/Users/emr/Desktop/ngsaglik/homeo/patient/templates/kayitlar/test.txt', 'w')
    testfile = File(f)

    kayitlar = Post.objects.all()
    lines = []
    for kayit in kayitlar:
        lines.append(f'{Post.soru1}')

    testfile.write(str(lines))
    testfile.close
    f.close
    return HttpResponse()

Вот результат

['<django.db.models.query_utils.DeferredAttribute object at 0x1069ce0d0>', '<django.db.models.query_utils.DeferredAttribute object at 0x1069ce0d0>']

Вам необходимо изменить Post.soru1 на kayit.soru1. Это потому, что Post является вызовом класса, а не экземпляра, который вы хотите получить в данном случае, поэтому он показывает только поле модели вместо значения экземпляра.

kayitlar = Post.objects.all() здесь вы присвоили переменной Post все существующие экземпляры модели kayitlar. Теперь вы можете забыть о Post и обрабатывать дальше переменную kayitlar со всеми объектами.

Вернуться на верх