Ich habe folgende Modellstrukturen:Django - Zugriff durch ManyToMany zusätzliches Feld in Vorlage
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']
Ich habe eine Zeit lang versucht, die Positionsdaten zu erhalten (einschließlich in AssocProjectMedia) in meiner Vorlage mit dem folgenden:
aus meiner Sicht:
project = get_object_or_404(Project, slug=project_slug)
return render(request, 'projects/projects_details.html', {"project":project})
in meiner Vorlage:
{% for media in project.media_set.all %}
...
{% endfor %}
Aber das funktioniert nicht, nichts erscheint.
Wenn ich stattdessen schreiben:
{% for media in project.media.all %}
...
{% endfor %}
ich meine Mediendaten bekommen, aber nicht derjenige, die in dem durch Modell (AssocProjectMedia).
Wenn jemand eine Idee hat, wie das zu tun ...
Oh, es ist Arbeit Dank! Ist es möglich, den related_name der 'through' Relation zu ändern? –
Ist es möglich, nur eine Zeile basierend auf einem Filter anstelle von assocprojectmedia_set.all() in der Vorlage zu erhalten? z. B. möchte ich eine Position erhalten, wo project = xx, media = xx – Kevin