2017-02-17 1 views
0

Ich habe das folgende Problem, meine Datenbank ist nicht leer und hat den Datensatz, den ich brauche. Aber wenn ich die DB abfrage, sagt es, dass es kein solches Objekt gibt, das der gegebenen Frage entspricht. Ich frage die Datenbank aus einem Websocket mit Django-Kanäle und meine Datenbank ist PostgreSQL.Django kein Objekt entspricht der angegebenen Abfrage, aber es sollte

Ich bin mir bewusst, dass es noch andere Fragen zu diesem Thema sind, und ich sah in ihnen, aber sie sind alle über leere Datenbank oder falsche URL Wegschnecke, die nicht mein Fall ist, und hilft mir nicht mit irgendetwas

Hier wird der entsprechende Code:

@channel_session_user_from_http 
def ws_receive(message): 
    username = message.user.username 
    print(username) 
    text = json.loads(message['text']).get('text') 
    # Use my algorithm here 
    score = score_argument.get_rating(text) 
    # find the room with our users 

    current_room = get_object_or_404(PairUsers, Q(username_a=username) | Q(username_b=username)) 

    # current_room = PairUsers.objects.filter(Q(username_a=username) | Q(username_b=username)).first() 

    # check which user you got and send the message to the other 
    if current_room.username_b == username: 
     current_room.score_b = score 
     other_channel = Channel(current_room.reply_channel_a) 
     message.reply_channel.send({'text': text}) 
     other_channel.send({'text': text}) 
    else: 
     current_room.score_a = score 
     other_channel = Channel(current_room.reply_channel_b) 
     message.reply_channel.send({'text': text}) 
     other_channel.send({'text': text}) 

andere Sache, die mir aufgefallen ist, dass der Druck (Benutzername) nichts drucken sie es einfach diese Zeile überspringt. Ich benutzen message.user.username in verschiedener Funktion, die so funktioniert, ich bin sicher, es sollte die Benutzername

Traceback zurück:

Traceback (most recent call last): 
    File "C:\Program Files (x86)\Python35\lib\site-packages\channels\worker.py", line 119, in run 
    consumer(message, **kwargs) 
    File "C:\Program Files (x86)\Python35\lib\site-packages\channels\sessions.py", line 180, in inner 
    result = func(message, *args, **kwargs) 
    File "C:\Program Files (x86)\Python35\lib\site-packages\channels\auth.py", line 73, in inner 
    return func(message, *args, **kwargs) 
    File "C:\Program Files (x86)\Python35\lib\site-packages\channels\sessions.py", line 64, in inner 
    return func(message, *args, **kwargs) 
    File "C:\Program Files (x86)\Python35\lib\site-packages\channels\auth.py", line 89, in inner 
    return func(message, *args, **kwargs) 
    File "C:\Users\nithe\Desktop\debateit\play\consumers.py", line 51, in ws_receive 
    current_room = get_object_or_404(PairUsers, Q(username_a=username) | Q(username_b=username)) 
    File "C:\Program Files (x86)\Python35\lib\site-packages\django\shortcuts.py", line 93, in get_object_or_404 
    raise Http404('No %s matches the given query.' % queryset.model._meta.object_name) 
django.http.response.Http404: No PairUsers matches the given query. 
+0

Können Sie die Traceback-Funktion buchen? –

+0

@ RaphaëlGomès done – nitheism

Antwort

0

message.user.username erscheint nicht None, Ihre Anfrage wird selbstverständlich zu sein. Diese Frage ist (noch) kein Datenbankproblem, es ist channels verwandt.
Versuchen Sie, Ihre message.user.__dict__ zu drucken, um zu sehen, ob sie mit dem erwarteten Objekt übereinstimmt.

+0

Es druckt leeres Wörterbuch, was bedeutet, dass es den Benutzer nicht aufnimmt, der es sendet? – nitheism

+0

Es scheint ein Problem mit Ihrer "Websocket" Verbindung zu geben. Aber das ist für eine andere Frage, denke ich. Stellen Sie alle Ihre Dateien (Routing, js, die Sie haben, usw.) dort zur Verfügung. –

Verwandte Themen