Tôi có cấu trúc mẫu sau:Django - Truy cập thông qua ManyToMany trường bổ sung trong mẫu
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']
Tôi đã cố gắng trong một thời gian để có được những dữ liệu vị trí (bao gồm trong AssocProjectMedia) trong mẫu của tôi với những điều sau đây:
theo quan điểm của tôi:
project = get_object_or_404(Project, slug=project_slug)
return render(request, 'projects/projects_details.html', {"project":project})
trong mẫu của tôi:
{% for media in project.media_set.all %}
...
{% endfor %}
Nhưng điều này không hoạt động, không có gì xuất hiện.
Nếu thay vào đó tôi viết:
{% for media in project.media.all %}
...
{% endfor %}
tôi sẽ nhận được dữ liệu truyền thông của tôi, nhưng không phải là người đưa vào thông qua mô hình (AssocProjectMedia).
Nếu ai có một ý tưởng về làm thế nào để làm điều đó ...
Oh đó là công việc cảm ơn! Có thể thay đổi related_name của quan hệ 'qua' không? –
Có thể chỉ nhận một hàng dựa trên một số bộ lọc thay vì assocprojectmedia_set.all() trong mẫu không? ví dụ: tôi muốn nhận vị trí dự án = xx, phương tiện = xx – Kevin