Please have a look at these models:
class Album(models.Model): user = models.ForeignKey(User) name = models.CharField(max_length=200) pub_date = models.DateTimeField(default=datetime.now) class Photo(models.Model): album = models.ForeignKey(Album, default=3) image = models.ImageField(upload_to=get_upload_file_name) caption = models.CharField(max_length=200) pub_date = models.DateTimeField(default=datetime.now)
How do I get the the set of photos for a particular album??? And how to get the Album from the photo instance itself?
I tried this:
# To get the set of photos from the user (tika) album: >>>t = User.objects.get(username='tika') >>>t_album = Album.objects.get(user=t) >>>t_album <Album: tika_album> >>>t_album.image_set.all() AttributeError: 'Album' Object has no attribute 'image_set'
Please guide me to the right direction. Thank you.
A ManyToManyField in Django is a field that allows multiple objects to be stored. This is useful and applicable for things such as shopping carts, where a user can buy multiple products. To add an item to a ManyToManyField, we can use the add() function.
To define a one to many relationship in Django models you use the ForeignKey data type on the model that has the many records (e.g. on the Item model).
Django will automatically generate a table to manage many-to-many relationships. You might need a custom “through” model. The most common use for this option is when you want to associate extra data with a many-to-many relationship.
str function in a django model returns a string that is exactly rendered as the display name of instances for that model.
You are almost there. you should be using photo_set
instead of image_set
>>>t_album.photo_set.all()
i.e the lowercase modelname with _set
If you want the list of photos in 1 query,
photos = Photo.objects.filter(album__user__username='tika')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With