2010-10-01 16 views
7

yılında ForeignKey ile ilgili birden fazla nesneyi döndürmek için:nasıl models.py aşağıdaki gelmiş Django

class HostData(models.Model): 
    Manager = models.ForeignKey(Managers) 
    Host = models.CharField(max_length=50, null=True) 
    HostStatus = models.CharField(max_length=200, null=True) 
    Cpu = models.PositiveIntegerField(max_length=10, null=True) 
    Disk = models.FloatField(null=True) 

Belirli bir "Yönetici" ile ilgili nesneler için sorgu dönmek istiyorum. Sorun şu ki, kullanıcı istediği kadar yönetici ekleyebilir/silebilir. Bu yüzden benim ilk düşüncem benim view.py'mde böyle bir şey olmasıydı:

def get_data(request): 
for server in Managers.objects.all(): 
    host_data = HostData.objects.filter(Manager=server) 
    # Lost after this :(
return render_to_response('mypage.html', {'first_set': host_data1, 'second_set': host_data2}) 

Birden çok nesneyi nasıl iade edebilirim? Kullanıcı başka bir "Yönetici" eklerse, benim view.py sayfamda üçüncü bir set alırım.

cevap

12

Öyle gibi related objects üzerinde sorgulayabilir:

manager = Managers.objects.get(pk=1) # identify which manager you want 
manager.hostdata_set.all() # retrieve all related HostData objects 

Şablonunuzda, ayrıca sadece hostdata_set doğrudan erişebilirsiniz:

{% for manager in managers %} 
    {% for data in manager.hostdata_set.all %} 
     do something with {{ data }} 
    {% endfor %} 
{% endfor %} 

Bunun için sorduğun buysa olduğuna inanıyoruz.

Bu arada, Managers modeliniz tek bir "Yönetici" hakkındaki verileri depolarsa, adını tekil olarak Manager olarak değiştirmenin yararını bulabilirsiniz.

+0

Teşekkür arıyoruz! aradığım şey buydu. Sadece bir not: Şablon etiketlerinde Parantez kullanılmaz, bu nedenle şablonda şunlar olmalıdır: manager.hostdata_set.all –

+0

Teşekkürler, bu bir kopyala ve yapıştır hata oldu. – Seth

+0

Komik .. Sadece * aynı * sadece aynı şeye ihtiyacım vardı. Teşekkürler Seth. –

0

Ben Sonra

managers = Managers.objects.all() 
host_data = HostData.objects.filter(managers__in=managers) 

Yapabileceğiniz

görünüm içinde döngü ... (belki ??) sizin gibi bir şey arıyor düşünüyorum?

Bunun işe yaramayacağından tam olarak emin değilim, ancak yardımcı olup olmadığını bana bildirin.

0

Sadece şablon bağlamına dinamically konak verilerini kümelerini ekleyin:

def get_data(request): 
host_data_sets = [] 

for server in Managers.objects.all(): 
    host_data_set = HostData.objects.filter(Manager=server) 
    host_data_sets.append(host_data_set) 

return render_to_response('mypage.html', {'host_data_sets': host_data_sets}) 

Sonra şablonunda veri setleri adımlayabilirsiniz:

{% for host_data_set in host_data_sets %} 
    <!-- do something with host_data_set --> 
{% endfor %} 
2

Size HostData sormak istiyorum görünüyor Belirli bir Yönetici ile ilgili tüm nesneleri döndürmek için. Eğer öyleyse, o zaman aradığınız belirli Yönetici hakkında tek bir bilgi parçasını bilmelisiniz. Tartışmanın iyiliği için

, en Yöneticisi "id" birincil anahtar olarak kullanılan ve dolayısıyla eşsiz olduğunu farz edelim ve bir id = 5.

id = 5 
hostdata = HostData.objects.filter(Manager__id=id) 
İlgili konular