suchen

Heim  >  Fragen und Antworten  >  Hauptteil

python – Django hatte Probleme beim Betrieb der Datenbank und konnte die aktualisierten Daten nicht abfragen

Ich habe die Eigenschaften von questions_text geändert und gespeichert


Dann fügen Sie die Methode __str__() hinzu und fragen alle Fragen erneut ab,

Mein obiger Code ist gemäß diesem implementiert
http://www.yiibai.com/django/... Ich habe es gerade erst gelernt und meine Schritte sind die gleichen wie in diesem Tutorial, das heißt nach dem Hinzufügen der __str__()-Methode , die korrekte Anzeige des Tutorials ist wie folgt:

Aber ich habe es selbst getestet und den Befehl eingegeben, aber ich konnte die Datensätze nicht sehen, nachdem ich ihn geändert habe. Ich habe beispielsweise
q.question_text = „Was ist los?“
q.save()

geändert

Führen Sie nach dem Speichern der Änderungen den folgenden Befehl aus
Question.objects.all()
Das Ergebnis ist wie folgt:

Was ist der Grund dafür – Django1.9, die Datenbank ist standardmäßig sqlite3

PHP中文网PHP中文网2735 Tage vor900

Antworte allen(2)Ich werde antworten

  • 巴扎黑

    巴扎黑2017-06-30 09:57:15

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

    Antwort
    0
  • typecho

    typecho2017-06-30 09:57:15

    感谢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:\Users\Administrator\AppData\Local\Programs\Python\Python35\myproject>python m
    anage.py runserver

    同时输入

    
        C:\Users\Administrator\AppData\Local\Programs\Python\Python35\myproject>python m
    anage.py shell
    Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AM
    D64)] on win32
    Type "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.注意缩进:

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

    Antwort
    0
  • StornierenAntwort