Получение объекта <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 со всеми объектами.