您的位置:首页技术文章
文章详情页

python - Django操作数据库遇到问题,无法查询更新后的数据

【字号: 日期:2022-06-27 08:16:35浏览:65作者:猪猪

问题描述

我更改了question_text的属性并保存python - Django操作数据库遇到问题,无法查询更新后的数据

python - Django操作数据库遇到问题,无法查询更新后的数据然后添加__str__()方法后再次查询所有Question,

我上面的代码是按照这个http://www.yiibai.com/django/...来实现的,刚学,自己的步骤跟这个教程是一样的,就是在添加 __str__() 方法后,教程的正确显示如下图:

python - Django操作数据库遇到问题,无法查询更新后的数据

但是我自己进行测试,输入命令,可是却看不到我更改后的记录,比如我将q.question_text = 'What’s up?'q.save()

保存好修改后,运行下面的命令Question.objects.all()结果如下图:python - Django操作数据库遇到问题,无法查询更新后的数据请问这是什么原因——Django1.9,数据库是默认的sqlite3

问题解答

回答1:

def __str__这应该是模型Question的类方法,这个方法决定了你查询时的返回,你定义的 return self.question_text,所以你查询到对象的时候它会返回对象的question_text属性, 但是你的书写格式错误,将这个方法定义到了类外面,它就变成了一个单一的函数,跟这个类没什么关系了, 你查询的时候就会默认返回一个Question对象。

回答2:

感谢tianren124的解答,问题得到了解决。首先需要修改models.py:models.py

# Create your models here.class Question(models.Model): def __str__(self):return self.question_text question_text = models.CharField(max_length=200) pub_date = models.DateTimeField(’date published’) class Chioce(models.Model): def __str__(self):return self.choice_text question = models.ForeignKey(Question, on_delete=models.CASCADE) choice_text = models.CharField(max_length=200) votes = models.IntegerField(default=0) # 每个模型是django.db.models.Model类的子类 #def was_published_recently(self):#return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

更改好上面的model.py代码后保存,打开cmd,重新输入

C:UsersAdministratorAppDataLocalProgramsPythonPython35myproject>python manage.py runserver

同时输入

C:UsersAdministratorAppDataLocalProgramsPythonPython35myproject>python manage.py shellPython 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32Type 'help', 'copyright', 'credits' or 'license' for more information.(InteractiveConsole)>>> import django>>> django.setup()>>> from polls.models import Question, Chioce>>> Question.objects.all()[<Question: What’s up?>, <Question: What’s up?>, <Question: What’s up?>]>>>

可以看到,不同于之前问题中的结果,当输入Question.objects.all()后,运行结果是我更改q.question_tex后的值 “What’s up?解决:1.修改models.py

def __str__(self):return self.question_text

应该放在

question_text = models.CharField(max_length=200) pub_date = models.DateTimeField(’date published’)

def __str__(self):return self.choice_text

同样要放在

question = models.ForeignKey(Question, on_delete=models.CASCADE) choice_text = models.CharField(max_length=200) votes = models.IntegerField(default=0)

的前面,至于为什么我自己也不太明白。2.注意缩进:python - Django操作数据库遇到问题,无法查询更新后的数据

表述的可能不是很清楚,欢迎指正

标签: Python 编程