2017-01-10 1 views
0

Une simple requête de django ne fonctionne pas et je me demande pourquoiPourquoi est-ce que j'obtiens un littéral invalide pour l'erreur d'exception int() lors de l'exécution de la requête django de base?

models.py

class Entry(models.Model): 
    headline= models.CharField(max_length=200,) 
    body_text = models.TextField() 
    author=models.ForeignKey(settings.AUTH_USER_MODEL, related_name='entryauthors') 
    pub_date=models.DateTimeField(auto_now_add=True) 

    def __str__(self): 
     return u'%s %s %s %s %s %s %s' % (self.headline, self.body_text, self.author, self.pub_date) 

Dans la coquille de django ou dans mon point de vue, je l'ai essayé

itemstosell = Entry.objects.get(author=username)[:4] 

qui se traduit par:

Exception Type: ValueError 
Exception Value: invalid literal for int() with base 10: 'john' 

Répondre

0

Parce que l'auteur est une clé étrangère a nd en tant que tel sera une référence à la clé primaire sur le modèle de l'utilisateur qui est susceptible d'être un nombre entier. Vous devez faire

itemstosell = Entry.objects.get(author__username=username)[:4] 
0

Par défaut, la méthode "get" renvoie seulement 1 résultat. Nous l'utilisons comme ceci: itemstosell = Entry.objects.get (pk = 1)

La méthode "filter" peut retourner un QuerySet, si vous voulez utiliser "(author__username = username) [: 4]" comme option, vous devez utiliser ce style: itemstosell = Entry.objects.filter (author__username = nom d'utilisateur) [: 4]

+0

OH, je comprends, votre problème est que vous n'avez pas défini la méthode "__str__" dans " AUTH_USER_MODEL ", Donc, django retourne la clé primaire qui pourrait être un nombre" id ". Je pense que vous devriez changer votre "AUTH_USER_MODEL", ajouter le contenu comme suit: def __str __ (self): return self.username –