2016-04-17 5 views
0

Ich bekomme den folgenden Fehler beim Versuch, auf einem QuerySet Benutzer Beiträge zu filtern, mit einem ForeignKey Autor. Django hat Problem mit der folgenden Zeile:Django Python: ungültiges Literal für int() mit Basis 10: 'arcetina'

posts = Post.objects.filter(author=components[0]) 

Und diesen Fehler spuckt:

invalid literal for int() with base 10: 'arcetina' 

Hier ist meine views.py:

def post_list(request): 
    global posts 

    context = {'posts' : posts} 

    for post in posts: 
     if not post.field: 
      post.field = 'Unspecified' 

    if request.method == "POST": 
     searchRegex = request.POST.get("searchregex") 
     components = searchRegex.split() 

     if searchRegex == "-reversedate": 
      posts = posts.reverse() 
      context = {'posts' : posts} 

     if "-user" in searchRegex: 
      posts = Post.objects.filter(author=components[0]) 

    return render(request, 'webapp/threadfeed.html', context) 

Und hier ist mein models.py:

class Post(models.Model): 
    title = models.CharField(max_length=150) 
    slug = models.SlugField() 
    text = models.TextField() 
    created_on = models.DateTimeField(auto_now_add=True) 
    up_vote = 0 # num of up votes 
    down_vote = 0 #num of down votes 
    vote_total = up_vote - down_vote 
    author = models.ForeignKey('auth.User', null=True, blank=True) 

    CHOICES = [ 
     ('Hardware and OS', 'Hardware and OS'), 
     ('Desktops', 'Desktops'), 
     ('Tablets', 'Tablets'), 
     ('Phones', 'Phones'), 
     ('Wearables', 'Wearables'), 
     ('Windows', 'Windows'), 
     ('Mac OS X', 'Mac OS X'), 
     ('Linux and Unix', 'Linux and Unix'), 
     ('Programming and Computer Science', 'Programming and Computer Science'), 
     ('Software Development', 'Software Development'), 
     ('Web Development (Front)', 'Web Development (Front)'), 
     ('Web Development (Back)', 'Web Development (Back)'), 
     ('Mobile Development', 'Mobile Development'), 
     ('Game Development', 'Game Development'), 
     ('Algorithms and Data Structures', 'Algorithms and Data Structures'), 
     ('Databases', 'Databases'), 
     ('IDE/Text Editors', 'IDE/Text Editors'), 
     ('Tutorial', 'Tutorial'), 
     ('Opinion', 'Opinion'), 
     ('Miscellaneous', 'Miscellaneous') 
    ] 
    field = models.CharField(choices=CHOICES, max_length=200, default='Unspecified') 

    def __unicode__(self): 
     return self.title.encode('utf-8') 

    @models.permalink 
    def get_absolute_url(self): 
     return ('blog_post_detail',(), 
       { 
        'slug' :self.slug, 
       }) 

    def save(self, *args, **kwargs): 
     if not self.slug: 
      self.slug = slugify(self.title) 
     super(Post, self).save(*args, **kwargs) 

Antwort

1

Wie der Fehler sagt, übergeben Sie eine Zeichenfolge, um ein Feld zu filtern, das eine ganze Zahl ist. (. Eigentlich ist es ein Fremdschlüssel, aber das wird als Integer-ID gespeichert)

Wenn Sie auf einem Feld in dem Bezugsmodell filtern mögen, müssen Sie den Doppelstrich Syntax:

posts = Post.objects.filter(author__username=components[0]) 

Beachten Sie auch, dass es eine extrem schlechte Idee ist, ein globales posts Queryset zu haben, besonders wenn Sie es in Ihrer Ansicht mutieren. Alle Anfragen sehen die gleiche Liste; Sobald Sie es nach Benutzer gefiltert oder umgekehrt haben, wird die nächste Anfrage das bereits geänderte Abfrage-Set anzeigen. Sie sollten die globale Variable entfernen und das Posts-Modell jedes Mal neu abfragen.

Verwandte Themen