I have the following model structures:
class Project(models.Model): title = models.CharField(max_length = 100) publish = models.BooleanField() cover = models.ForeignKey(GenericMedia, related_name='+') media = models.ManyToManyField(GenericMedia, through='AssocProjectMedia') credits = models.ManyToManyField(AssocTitleName) class GenericMedia(models.Model): limit = models.Q(model = 'Image') | models.Q(model = 'Other') content_type = models.ForeignKey(ContentType, limit_choices_to = limit) object_id = models.PositiveIntegerField() content_object = generic.GenericForeignKey('content_type', 'object_id') def __unicode__(self): return u"%s" % os.path.basename(self.content_object.url.name) def instance(self): return self.content_object.__class__.__name__ class AssocProjectMedia(models.Model): project = models.ForeignKey(Project) media = models.ForeignKey(GenericMedia) position = models.PositiveSmallIntegerField() grid_size = models.PositiveSmallIntegerField(null = True, blank = True) class Meta: ordering = ['position']
I tried for some time to get position data (including in AssocProjectMedia) in my template with the following:
in my opinion:
project = get_object_or_404(Project, slug=project_slug) return render(request, 'projects/projects_details.html', {"project":project})
in my template:
{% for media in project.media_set.all %} ... {% endfor %}
But this does not work, nothing is displayed.
If instead I write:
{% for media in project.media.all %} ... {% endfor %}
I will get my multimedia data, but not the one included in the pass-through model (AssocProjectMedia).
If anyone has an idea on how to do this ...
source share