recherche

Maison  >  Questions et réponses  >  le corps du texte

python - Django a rencontré des problèmes lors du fonctionnement de la base de données et n'a pas pu interroger les données mises à jour

J'ai modifié les propriétés de question_text et enregistré


Ensuite, ajoutez la méthode __str__() et interrogez à nouveau toutes les questions,

Mon code ci-dessus est implémenté selon ceci
http://www.yiibai.com/django/... Je viens de l'apprendre, et mes étapes sont les mêmes que ce tutoriel, c'est-à-dire après avoir ajouté la méthode __str__() , l'affichage correct du tutoriel est le suivant :

Mais je l'ai testé moi-même et j'ai entré la commande, mais je n'ai pas pu voir les enregistrements après l'avoir modifié. Par exemple, j'ai modifié
q.question_text = "What's up?"
q.save()

.

Après avoir enregistré les modifications, exécutez la commande suivante
Question.objects.all()
Le résultat est le suivant :

Quelle est la raison de cela - Django1.9, la base de données est sqlite3 par défaut

PHP中文网PHP中文网2735 Il y a quelques jours901

répondre à tous(2)je répondrai

  • 巴扎黑

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

    def __str__ Cela devrait être la méthode de classe du modèle Question. Cette méthode détermine le retour lorsque vous interrogez. Vous définissez return self.question_text, donc lorsque vous interrogez l'objet, il renverra l'attribut question_text de l'objet, mais votre écriture. Le format est incorrect. Si cette méthode est définie en dehors de la classe, elle devient une fonction unique et n'a rien à voir avec la classe. Lorsque vous interrogez, un objet Question sera renvoyé par défaut.

    répondre
    0
  • typecho

    typecho2017-06-30 09:57:15

    Merci à tianren124 pour la réponse, le problème a été résolu.
    Vous devez d'abord modifier 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)

    Après avoir modifié le code model.py ci-dessus, enregistrez-le, ouvrez cmd et saisissez-le à nouveau

    C:\Users\Administrator\AppData\Local\Programs\Python\Python35\myproject>python m
    anage.py runserver

    Entrez simultanément

    
        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?>]
    >>>
    
    

    Vous pouvez voir que, contrairement aux résultats de la question précédente, lorsque Question.objects.all() est entré, le résultat en cours d'exécution est la valeur après avoir modifié q.question_tex "Quoi de neuf ?
    Solution :
    1. Modifier les modèles. py

    def __str__(self):
            return self.question_text
        

    doit être placé dans

    
        question_text = models.CharField(max_length=200)
        pub_date = models.DateTimeField('date published')
    
     def __str__(self):
            return self.choice_text

    Mettez également

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

    Devant moi, je ne comprends pas très bien pourquoi.
    2. Faites attention à l'indentation :

    L'expression n'est peut-être pas très claire, veuillez me corriger

    répondre
    0
  • Annulerrépondre