2016-10-24 2 views
0

Lange Zeit Zuhörer, zum ersten Mal Poster. Ich hoffe auf Hilfe mit meinem Modellproblem.Django - Viele zu vielen Modell Returning None

Ich habe Probleme mit meiner vielen zu vielen Beziehung. Wenn ich ein Formular abschicke, möchte ich die Informationen meines Nutzers mit dem von ihnen erstellten Post verknüpfen. Ich benutze viele zu viele, weil ich eine zusätzliche Funktion haben werde, wo andere Benutzer auf derselben Reise teilnehmen können.

Derzeit sind meine Daten für meine Trip-Tabellen in Ordnung, aber mein Benutzer wird nicht mit der Trip-ID verknüpft, so dass ich seinen Namen nicht auf der Vorlage rendern kann.

Unten ist mein Code. Schätze jede Hilfe! Prost

Hier sind meine models.py:

class User(models.Model): 
    name = models.CharField(max_length=45) 
    username = models.CharField(max_length=255) 
    password = models.CharField(max_length=255) 
    created_at = models.DateTimeField(auto_now_add=True) 
    updated_at = models.DateTimeField(auto_now=True) 
    objects = UserManager() 

class Trip(models.Model): 
    destination = models.CharField(max_length=45) 
    description = models.CharField(max_length=255) 
    datefrom = models.CharField(max_length=255) 
    dateend = models.CharField(max_length=255) 
    user = models.ManyToManyField(User) 
    created_at = models.DateTimeField(auto_now_add=True) 
    updated_at = models.DateTimeField(auto_now=True) 

Hier mein views.py ist:

def travels(request): 
    user = User.objects.get(id=request.session['logged_user']) 
    all_trips = Trip.objects.all().order_by('-id') 
    user_trips = Trip.objects.filter(user=request.session['logged_user']) 
    context = { 
     "user_trips": user_trips, 
     "all_trips": all_trips, 
     "user": user, 
    } 
    return render(request, 'belt_exam/travels.html', context) 

def addtrip(request): 
    user_id = request.session['logged_user'] 
    createdtrip = Trip.objects.create(destination=request.POST['destination'], description=request.POST['description'], datefrom=request.POST['datefrom'], dateend=request.POST['dateend']) 
    createdtrip.user.add(User.objects.get(id=user_id))  
    return redirect('/travels') 

Hier ist meine Vorlage:

{% for alltrip in all_trips.all %} 
    <tr> 
     <td>{{alltrip.name}}</td> 
     <td><a href="travels/destination/{{alltrip.id}}">{{alltrip.destination}}</a></td> 
     <td>{{alltrip.datefrom}}</td> 
     <td>{{alltrip.dateend}}</td> 
     <td> 
     <form class="" action="travels/destination/{{alltrip.id}}" method="POST"> 
     {% csrf_token %} 
     <input type="submit" value="Join"> 
     </form> 
     </td> 
    </tr> 
{% endfor %} 

Antwort

0

In der Zeile

user_trips = Trip.objects.filter(user=request.session['logged_user']) 

Sie vergleichen die Benutzer-ID aus der Sitzung mit dem Objekt User. Das wird nicht funktionieren. Richtig wäre

user_trips = Trip.objects.filter(user=user) 

Aber es gibt einen besseren Weg, um den Benutzer zu reisen. Zu jeder Beziehung schafft Django eine umgekehrte Beziehung. Der Name kann als related Namensattribut des ManyToManyField

user = models.ManyToManyField(User, related_name='trips') 

Jetzt können Sie nur das Attribut als Objekt-Manager auf dem Zielmodell (wie objects)

user_trips = user.trips.all() 
+0

Dank Klaus verwenden eingestellt werden! Ich bin immer noch ein wenig verwirrt darüber, wie das funktioniert. Mein "models.ManyToManyField (User)" befindet sich auf der Trip-Tabelle. Ich versuche, die beiden Tabellen miteinander zu verbinden, damit ich die Benutzer-ID des Posters zur Trip-ID hinzufügen kann. Kannst du weiter erklären? Entschuldigung, ich bin neu im Programmieren, also vielen Dank für Ihre Geduld! – justinchanman

+0

vielleicht wird Ihnen das helfen, https://docs.djangoproject.com/en/1.10/topics/db/queries/#following-relations-backwards zu verstehen –

Verwandte Themen