2013-07-07 42 views
6

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

Trả lời

13

Hãy thử điều này:

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

Oh đó là công việc cảm ơn! Có thể thay đổi related_name của quan hệ 'qua' không? –

+0

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

Các vấn đề liên quan