Petit pense bête sur comment retrouver les objets liés par des clés étrangères avec Django
Dans mon cas d’utilisation j’ai deux models d’objets :
Le model pour une annonce d’appartement qui est liée à un évenement :
class Accommodation(models.Model):
#Foreign keys
user = models.ForeignKey(User, unique=False, verbose_name=_('user'))
event = models.ForeignKey(Event, unique=False, verbose_name=_('event'),blank=True, null=True)
#Attributes
title = models.CharField(max_length=200)
address = models.CharField(max_length=200)
description = models.TextField()
longitude = models.CharField(max_length=200, null=True)
latitude = models.CharField(max_length=200, null=True)
price = models.DecimalField(max_digits=5, decimal_places=2)
photo_count = models.CharField(max_length=2, null=True)
created_on = models.DateTimeField(auto_now_add=True)
accommodates = models.IntegerField()
bedrooms = models.IntegerField(null=True)
views = models.IntegerField(null=True)
last_modify_on = models.DateTimeField(auto_now_add=True)
Et l’évènement en lui même :
class Event(models.Model):
def __unicode__(self):
return self.title
#Foreign keys
created_by = models.ForeignKey(User, unique=False, verbose_name=_('created_by'))
#Attributes
title = models.CharField(max_length=200)
address = models.CharField(max_length=200)
description = models.TextField()
longitude = models.CharField(max_length=200, null=True)
latitude = models.CharField(max_length=200, null=True)
price = models.DecimalField(max_digits=5, decimal_places=2)
created_on = models.DateTimeField(auto_now_add=True)
def upload_path(self, filename):
return 'upload/events/%s/%s' % (self.id, filename)
photo = models.ImageField(upload_to=upload_path)
start_on = models.DateTimeField()
end_on = models.DateTimeField()
views = models.IntegerField(null=True)
displayed = models.BooleanField()
last_modify_on = models.DateTimeField(auto_now_add=True)
Ma grande question du jour était donc : Comment faire pour retrouver à partir d’un évènement toutes les annonces associées ? . Rien de plus simple :
event = Event.objects.get(id=1)
annonces = event.accommodation_set
#On affiche le nombre d'appartements :
event.accommodation_set.count()
Et voici l’astuce du jour
Leave a Comment