2017-05-29 3 views
-1

Ich mache ein Django-Projekt (Art von sozialem Netzwerk) und möchte eine Seite haben, wo ich alle meine Beiträge sehen kann, was ich getan habe.Django keine solche Spalte ForeignKey

ich den Fehler Immer bekommen: keine solche Spalte: uploaded_by

in models.py

from django.db import models 
from django.contrib.auth.models import User 

class ContentItem(models.Model): 
    upload_date = models.DateTimeField(auto_now=True) 
    title = models.CharField(max_length=100, default='no title') 
    description = models.CharField(max_length=400, default='no description') 
    image = models.ImageField(upload_to='image_board/posts/', default='null') 
    uploaded_by = models.ForeignKey(User, default='0') 

    def __str__(self): 
     return self.title 

in views.py

def view_my_favorites(request): 
    all_posts = ContentItem.objects.raw('SELECT * FROM image_board_ContentItem WHERE uploaded_by = request.user.username') 
    template = loader.get_template('favorites.html') 
    context = { 
     'all_posts': all_posts, 
    } 
    return HttpResponse(template.render(context, request)) 

Ich möchte den Benutzernamen des bekommen Benutzer, der angemeldet ist, wie kann ich dies in der SQL-Abfrage whiten?

Thaks Jungs :)

+1

Warum Sie 'raw' Abfrage in erster Linie verwenden? – errata

+0

nicht sicher über die rohe Abfrage, aber haben Sie erwogen, all_posts in der Standard-Django Weg wie: all_posts = ContentItem.objects.get (user = request.user) anstatt mit Raw SQL? Was auch immer Ihre Gründe sind, es lohnt sich, es auszuprobieren, vielleicht ist Ihr Modell nicht sync; d mit der db und Sie müssen nur eine manage.py migrieren – jnvilo

Antwort

1

Ihr eigentliches Problem wahrscheinlich durch Vernachlässigung zu machen und führt Migrationen nach dem Hinzufügen des uploaded_by Feldes verursacht wird.

Aber es gibt eine große Anzahl anderer Dinge, die hier falsch sind.

Zuerst vergleichen Sie die Spalte uploaded_by mit einer nicht vorhandenen Spalte request.user.username. Sie müssen den tatsächlichen Wert dieser Variablen verwenden.

Zweitens, Sie vergleichen einen Fremdschlüssel - uploaded_by - mit einer Zeichenfolge, username. Diese werden niemals übereinstimmen.

Drittens verwenden Sie eine unbearbeitete Abfrage. Das ist absolut nicht nötig.

Ihre Abfrage ist in der Django-Abfragesyntax trivial. Sie tun sollten:

all_posts = ContentItem.filter(uploaded_by=request.user) 

oder noch einfacher:

all_posts = request.user.contentitem_set.all() 
+0

Danke, es funktioniert :) Nur ein bisschen geändert: all_posts = ContentItem.objects.filter (uploaded_by = request.user) –

Verwandte Themen