Comment puis-je transmettre les données à un modèle dans Django?
Dans le modèle ci-dessous, je suis en train d'essayer d'obtenir le nom de la cour (qui est capturé par le biais de la "création" de terrain). Je suis de passage "club_id" par le biais de la avail_times fonction, mais comment puis-je passer de la "création" de terrain passé par le modèle à partir de cette?
Le modèle:
class Club(models.Model):
establishment = models.CharField(max_length=200)
address = models.CharField(max_length=200)
def __unicode__(self):
return self.establishment
class Available(models.Model):
club = models.ForeignKey(Club)
court = models.CharField(max_length=200)
avail_time = models.DateTimeField('available time')
def __unicode__(self):
return self.court
La fonction:
def avail_times(request, club_id):
courts = Available.objects.filter(club__id=club_id)
return render_to_response('reserve/templates/avail_times.html', {'courts': courts})
Le modèle:
<h1>All available courts for {{ court.club }}</h1>
<ul>
{% for court in courts %}
<li>{{ court }}</li>
{% endfor %}
</ul>
- En aparté, vous devriez être en utilisant des tribunaux = Disponible.objets.get(club__id=club_id), c'est plus rapide.
Vous devez vous connecter pour publier un commentaire.
Étendent sur les relations de clé étrangère à l'aide de la notation point. Vous devez passer "à travers" la clé étrangère pour se rendre à l'
Club
modèle. Ceci est fait par l'accès à laclub
attribut. Donc, en outre supposé que tu voulais accéder à la fois à la création du nom ET de l'adresse, vous pouvez ajouter<li>{{ court.club.address }}</li>
pour afficher l'adresse de trop.Être prudent, cependant, vous pouvez utiliser django debug toolbar pour voir combien de requêtes sont en cours d'exécution. si vous avez beaucoup de tribunaux, vous remarquerez peut-être un gain de performance. Juste quelque chose à garder à l'esprit.
Tribunaux est un objet queryset. Vous essayez d'accéder à la propriété de
court.club
qui n'existe pas, comme vous l'avez probablement remarqué django échoue silencieusement lorsque cela se produit. Il y a deux façons d'obtenir le nom de club.Vous pourriez donner quelques idées pour votre schéma. Les clubs peuvent avoir plusieurs tribunaux?? Sinon c'est "mieux" pour utiliser
.get
comme Zahir suggéré. Si il peut avoir plusieurs tribunaux, alors vous devriez regarder dans une relation ManyToMany afin de mieux refléter cette.