2

Ich erhalte diesen Fehler aus irgendeinem Grund auf dem Server:Django - mehr als eine Zeile von einer Unterabfrage zurückgegeben als Ausdruck verwendet

mehr als eine Zeile von einer Unterabfrage zurückgegeben als Ausdruck verwendet

auf dieser Linie:

asoc = Association.objects.get (id = asoc_pk) (kommentiert in dem folgenden Code unten)

aber wenn ich es in lo laufen Calhost es funktioniert gut.

Sie suchten hier nach ähnlichen Lösungen ohne Hilfe.

Hoffentlich können Sie andere Lösungen sehen, die ich nicht herausfinden kann.

Noch neu dazu und schätze Ihre Hilfe, Leute!


models.py

class Administrator(AbstractUser): 
    ... 
    association= models.ForeignKey(Association) 


    class Meta: 
     db_table = 'Administrator' 



class Association(models.Model): 
    asoc_name = models.CharField(max_length=100) 
    ... 


    class Meta: 
     db_table = 'Association' 

views.py

def signup(request): 
    if request.method == 'POST': 
     form = SignUpForm(request.POST) 
     if not form.is_valid(): 
      return render(request, 'admin/signup.html', 
          {'form': form}) 

     else: 
      ... 
      asoc_pk = Association.objects.filter(asoc_name=request.user.association) 
      asoc = Association.objects.get(id=asoc_pk) **#ERROR here but why?** 
      ... 
      Administrator.objects.create_user(... 
               association=asoc,  
               ...) 
      user = authenticate(... 
           association=asoc, 
           ...) 
      return redirect('/') 

    else: 
     return render(request, 'admin/signup.html', 
         {'form': SignUpForm()}) 

Antwort

2
 asoc_pk = Association.objects.filter(asoc_name=request.user.association) 
     asoc = Association.objects.get(id=asoc_pk) **#ERROR here but why?** 

Weil Ihr Verband Modell eine eindeutige Einschränkung für die asoc_name Eigenschaft nicht erzwingen wird. Das macht es sehr wahrscheinlich, dass es mehr als einen Datensatz geben kann, der request.user.association entspricht. Die Lösung besteht darin, diese Spalte eindeutig zu machen. Sie müssen jedoch zuerst die Duplikate löschen (und es gibt viele Antworten darauf, wie man Duplikate löscht)

+0

Dann denken Sie daran, 'filter' in' get' zu ändern, so: '" asoc_pk = Association.objects. get (asoc_name = request.user.association) "' – danihp

+0

ja in der Tat. das auch – e4c5

+0

@ e4c5 - DANKE SOOO VIEL !!! Habe seit Tagen mit diesem Problem gekämpft. Immer etwas Neues zu lernen und Entschuldigung für die Verzögerung. – Niknak

Verwandte Themen