Reputation: 2697
Using a model like this:
class Folder(models.Model):
user = models.ForeignKey(User)
name = models.CharField()
class CanAccess(models.Model):
folder = models.ForeignKey(Folder)
user = models.ForeignKey(User)
class Image(models.Model):
folders = models.ManyToManyField('Folder')
title = models.CharField()
I need to find all the images that a user can access.
I have tried this, but its not working:
images=Image.objects.filter(folders__canaccess_set__user=current_user)
I get an FieldError
when Django looks up the canaccess_set
part.
Whats is the best way to make such a query?
Upvotes: 1
Views: 959
Reputation: 2697
Ok, the info found here:
http://bitkickers.blogspot.dk/2010/04/django-manytomany-error-cannot-resolve.html
indicated that load order of the model could yield this kind og error, so i changed the models.py file from this order:
class Image(models.Model):
folders = models.ManyToManyField('Folder')
title = models.CharField()
class Folder(models.Model):
user = models.ForeignKey(User)
name = models.CharField()
class CanAccess(models.Model):
folder = models.ForeignKey(Folder)
user = models.ForeignKey(User)
to this order:
class CanAccess(models.Model):
folder = models.ForeignKey("Folder")
user = models.ForeignKey(User)
class Image(models.Model):
folders = models.ManyToManyField('Folder')
title = models.CharField()
class Folder(models.Model):
user = models.ForeignKey(User)
name = models.CharField()
And that actually seems to fix the problem.
Upvotes: 0
Reputation: 599778
You don't need the _set
when doing a lookup:
Image.objects.filter(folders__canaccess__user=current_user)
Upvotes: 2