Django - access through the ManyToMany additional field in the template

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 ...

+6
source share
1 answer

Try the following:

 {% for assoc_media in project.assocprojectmedia_set.all %} {{assoc_media.position}} {# or whatever field #} {% endfor %} 
+13
source

Source: https://habr.com/ru/post/948892/


All Articles