2012-06-15 20 views
11

Vì một vài tuần, tôi đang học Python và Django. Tính đến thời điểm này, nó đã đủ để đọc các câu hỏi và câu trả lời của những người dùng khác. Nhưng bây giờ, thời điểm câu hỏi đầu tiên của tôi đã đến.Django: Cách nhận dữ liệu được kết nối bằng ForeignKey qua Mẫu?

Tôi sẽ cố gắng mô tả vấn đề của mình là tốt nhất có thể. Vấn đề của tôi là tôi không thể truy vấn hoặc lấy dữ liệu tôi muốn.

Tôi muốn lấy url của đối tượng đầu tiên của lớp Hình ảnh được liên kết bởi ForeignKey đến một Thư viện, được liên kết bởi ForeignKey với mục nhập lớp.

Ở đây models.py cho đến nay:

class BlogEntry(models.Model): 
    ... 
    title = models.CharField(max_length=100) 
    ... 

class Gallery(models.Model): 
    entry = models.ForeignKey('BlogEntry') 

class Image(models.Model): 
    gallery = models.ForeignKey('Gallery') 
    picture = models.ImageField(upload_to='img') 

The View:

def view(request): 
    return render_to_response('mainview.html', { 
    'entryquery': BlogEntry.objects.all(), 
    } 
) 

Template:

{% for item in entryquery %} 
    <h1>{{ item.title }}</h1> 
    <img src="{{ item.WHAT TO ENTER HERE? :) }}" /> 
{% endfor %} 

Rõ ràng những gì mà tôi muốn? Ai đó có thể giúp tôi và khi có thể viết một lời giải thích ngắn?

lời chào Bastian

Trả lời

14

Bạn có thể access related members giống như other attributes in a template, vì vậy bạn có thể làm điều gì đó như: item.gallery_set.all.0.image_set.all.0.picture.img. Tuy nhiên, nó có thể được dễ dàng hơn để xác định một phương pháp trên BlogEntry mà nhìn lên và trở lại hình ảnh phù hợp, do đó bạn chỉ có thể làm item.first_image hoặc một cái gì đó như thế

+0

Cảm ơn bạn đã trả lời nhanh :). Tôi không hiểu chính xác dòng mã này. Bạn có thể cho tôi liên kết đến tài liệu về quyền truy cập vào các thành viên liên quan không? Tôi đã không tìm thấy một cái gì đó trên trang tài liệu Django. – user1459531

+0

Yep, đã thêm liên kết vào nó. Hy vọng rằng sẽ giúp! – cberner

+0

Cảm ơn bạn, Cảm ơn bạn, Cảm ơn bạn! :) – user1459531

0
class BlogEntry(models.Model): 
    ... 
    title = models.CharField(max_length=100) 
    ... 

class Gallery(models.Model): 
    entry = models.ForeignKey('BlogEntry',related_name="galleries") 

class Image(models.Model): 
    gallery = models.ForeignKey('Gallery',related_name='images') 
    picture = models.ImageField(upload_to='img') 

Bạn phải thêm related_name trong chính nước ngoài tại mô hình thư viện và ở chế độ xem mẫu:

{% for g in blogentry.galleries.all %} 
    {{g.name}} 
     {%for i in g.images.all %} 
      <img src="{{i.picture.url}}">{{i.picture}}</img> 
     {% endfor %} 
{% endfor %} 
Các vấn đề liên quan