2009-03-04 15 views
2

katılmak İşte benim modeliDjango ben django ile çalışan ve karmaşık sorgular</p> <p>nasıl kavrama bir zorlanıyorum sorgu

ben tankı nesne verilen kullanıcı adı çekmek gerekir
class TankJournal(models.Model): 
    user = models.ForeignKey(User) 
    tank = models.ForeignKey(TankProfile) 
    ts = models.DateTimeField(auto_now=True) 
    title = models.CharField(max_length=50) 
    body = models.TextField() 

    class Meta: 
     ordering = ('-ts',) 
     get_latest_by = 'ts' 

olduğunu.

Kullanıcı nesnesi django'da yerleşik olanıdır .. teşekkürler!

DÜZENLEME: ben denedim

bu

print User.objects.filter(tankjournal__tank__exact=id) 

O .. sadece kimliği çıkarıp tankjournal her şeyi çekin ve tank nesnesine eşleşmiyor gibi görünüyor

cevap

6

ise Şu anda yapmanız gereken tank tankınız var:

tank.user.username 

Veritabanı sorgularını azaltmak için, select_related() kullanımını göz önünde bulundurmak isteyebilirsiniz.

tanks = TankJournal.objects.all().select_related() 
for tank in tanks: 
    username = tank.user.username 

sonra belirli bir tankı kimliği varsa: Sorunuzu yanlış anlama olabilir, ama User.objects.filter() üzerinde bir istek Kullanıcı nesneleri değil, kullanıcı kimliklerinin listesini döndürür

tank = TankJournal.objects.select_related().get(id=123456) 
username = tank.user.username 
1

. Yazdıkların teknik olarak doğru görünüyor.

Bununla birlikte, modelin, TankProfile nesnesi ve TankJournal arasında bire çok kurduğunu unutmayın. Diğer bir deyişle, tek bir TankProfili birden fazla TankJournal ile ve dolayısıyla birden fazla kullanıcı ile ilişkilendirilebilir. Bunu göz önünde bulundurduğunuzda, sorgunuz doğru olanı yapıyor ve birden fazla Kullanıcı döndürüyor.

+0

her bir kullanıcının birden fazla deposu olabilir .. ve her bir tankın birden fazla günlük kaydı olabilir .. Kullanıcı nesnesini tankJournal modelinden kaldırmanın doğru yolu nedir? – Mike

+0

Her tankta birden fazla günlük kaydı bulunabilirse, her bir tankta da (potansiyel olarak) birden fazla kullanıcı olabilir. Bunu yalnızca tek bir kullanıcıya daraltmanız gerekirse, başka bir parametreye ihtiyacınız olacaktır. TankJournal veya User'dan başlayıp başlamadığınız, büyük ihtimalle bu parametrenin ne olduğuna bağlı olacaktır. –