2010-03-02 42 views
7

Tôi đang tìm các phím nước ngoài django một chút khó hiểu, có cách nào để thực hiện chế độ xem bên dưới, sử dụng một truy vấn đơn lẻ không?Django - Lấy đối tượng khóa ngoại trong truy vấn đơn lẻ?

# Model 
class Programme(models.Model): 
    name = models.CharField(max_length = 64) 

class Actor(models.Model): 
    programme = models.ForeignKey(Programme) 
    name = models.CharField(max_length = 64) 


# View 
def list_actors(request, programme_id): 
    programme = Programme.objects.filter(id = programme_id)[0] 
    actors = Actor.objects.filter(programme = programme_id) 
    json = simplejson.dumps([{ 
     'name': str(actor.name), 
     'rating': str(actor.rating),} for actor in actors]) 
    return HttpResponse(json, mimetype='application/javascript') 

Trả lời

9

Bạn truy vấn Programme và gán cho programme, nhưng bạn không bao giờ sử dụng kết quả ở bất cứ đâu. Chỉ cần loại bỏ dòng đó.

+0

Chỉ nhận thấy điều này ... doh! Cần phải quay trở lại khi tôi có thể hiểu rõ hơn ... –

9

Tôi nghĩ rằng bạn đang tìm kiếm một cái gì đó như thế:

https://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related

được select_related, bạn đặt trước get thức. Đó là dòng của bạn:

actors = Actor.objects.filter(programme = programme_id) 

nên trông giống như

actors = Actor.objects.select_related().filter(programme = programme_id) 

Thật không may như nhấn mạnh ở đây: get foreign key objects in a single query - Django bạn sẽ chỉ có thể lấy các diễn viên như vậy như select_related chỉ hoạt động trên các đối tượng có ForeignKeys và không phải ngược ngược lại.

+0

'select_related' sẽ chỉ cần nếu bạn muốn truy cập' actor.programme.name' mà không cần nhấn thêm DB cho mỗi tác nhân. Nếu không thì nó không cần thiết. – Hamish

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