2017-06-06 2 views
0

Ich habe ähnliche Fehler im Forum gefunden, aber ich sehe keine Fehler in meinem Code, und Modelle und Ansichten sind wirklich nicht kompliziert.Django Kann das Schlüsselwort "Word" nicht in das Feld auflösen. Die Optionen sind:

class Word(models.Model): 

    word_text = models.CharField(max_length=50) 
    user_crea = models.CharField(max_length=20) 
    publ_date = models.DateTimeField(auto_now_add=True) 
    modi_date = models.DateTimeField(auto_now=True) 


class Explanation(models.Model): 

    word_foid = models.ForeignKey(Word, on_delete=models.CASCADE) 
    expl_text = models.CharField(max_length=50) 
    user_crea = models.CharField(max_length=20) 
    publ_date = models.DateTimeField(auto_now_add=True) 
    modi_date = models.DateTimeField(auto_now=True) 

Also meiner Meinung nach Außenbeziehung sollte in Ordnung sein. Ich habe keine Probleme, wenn ich neue Daten über das Admin-Panel hinzufüge. Ich benutzte es in einer Ansicht:

views.py:

def index(request): 
    if request.method == 'POST': 
     form = Search(request.POST) 
     if form.is_valid(): 
      dane = form.cleaned_data 
      tlumaczenie=Explanation.objects.filter(Word__word_text=dane['Searched_word']) 
      print(tlumaczenie) 
      return render(request,'explanation.html', {'dane':dane}) 

Aber ich bin immer noch Fehler bekommen:

django.core.exceptions.FieldError: Cannot resolve keyword 'Word' into field. Choices are: expl_text, id, modi_date, publ_date, user_crea, word_foid, word_foid_id

Ich verstehe nicht, warum. Es sollte Abfrage senden wie:

select e.* from word w join explanation e on w.word_id = e.word_foid where w.word_text = dane['Searched_word'] 

und rufen Sie die Daten ab.

Irgendwelche Ideen, warum es nicht richtig funktioniert?

Antwort

2

Ihr Fremdschlüsselfeld heißt word_foid, nicht Word. Die Abfrage sollte diesen Namen wie folgt verwenden

tlumaczenie = Explanation.objects.filter(word_foid__word_text=dane['Searched_word']) 
+0

Aber ich weiß nicht word_id. Wenn ich meine Ansicht fortsetze, habe ich nur word_text. Ich denke, ich mache genau wie Dokumentation zeige es: "Django bietet eine leistungsfähige und intuitive Möglichkeit, Beziehungen in Nachschlagewerken zu" folgen ", kümmert sich um die SQL-JOINs für Sie automatisch, hinter den Kulissen. Um eine Beziehung zu überspannen, verwenden Sie einfach die Feldname von verwandten Feldern in Modellen, getrennt durch doppelte Unterstriche, bis Sie das gewünschte Feld erreichen In diesem Beispiel werden alle Entry-Objekte mit einem Blog namens "Beatles Blog" abgerufen: >>> Entry.objects. filter (blog__name = 'Beatles Blog') " – Artemise

+0

' Explanation.objects.filter (word_foid__word_text = dane ['Gesuchtes_wort']) 'ist was du suchst – Brobin

Verwandte Themen