2015-09-02 4 views
1

У меня есть моделиПоказать некоторые поля из двух таблиц Джанго ОРМ

class Trpinjaman(models.Model): 

    uid = models.AutoField(primary_key=True, db_column='uid',) 
    cjenispinjaman = models.CharField(db_column='cJenisPinjaman', max_length=255, blank=True, 
            null=True) 

class Trpinangsuran(models.Model): 
    cbulan = models.CharField(db_column='cBulan', max_length=6, blank=False, null=True) 
    cpinjamanid = models.ForeignKey('Trpinjaman', db_column='cPinjamanId', blank=True, 
           null=True) 
    ccicilanke = models.IntegerField(db_column='cCicilanKe', blank=True, null=True) 

Я хочу, чтобы отобразить все данные из обеих моделей с помощью этого кода

datapinjam=Trpinjaman.objects.all() 
for obj in datapinjam: 
     obj.uid, 
     obj.jenispinjaman, 
     obj.cbulan, 
     obj.ccicilanke, 

, но я получаю эту ошибку

'Trpinjaman' object has no attribute 'cbulan' 
+0

Вы уверены, что существует только один объект ** Trpinangsuran ** для каждого объекта ** Trpinjaman **? Если вы не хотите показывать поля каждого объекта ** Trpinangsuran **, связанного с одним объектом ** Trpinjaman **? –

+0

Я не могу этого сделать. Но Trpinangsuran имеет поле cpinjamanid, что foreignkey для Trpinjaman, я думаю, он может получить все данные от Trpinangsuran. – Gusan

+0

Было бы проще, если бы ваши имена переменных были на английском языке. Вы не должны использовать 'id' в своей модели, и вам не нужно определять db_column. 'cpinjaman' вместо' cpinjamanid'. Кроме того, поскольку это внешний ключ для «Trpinjaman», почему он не называется «trpinjaman»? –

ответ

2

Есть два Options-

1) Поскольку вы используете ForeignKey, может быть несколько Trpinangsuran объектов для каждого объекта Trpinjaman, поэтому вам нужно будет решить, какой из этих нескольких объектов использовать. Один из способов - взять первый Trpinangsuran объект для каждого Trpinjaman объект. Вы можете сделать following-

datapinjam=Trpinjaman.objects.all() 
for obj in datapinjam: 
    obj.uid, 
    obj.cjenispinjaman, 
    trpinangsuran_obj = obj.trpinangsuran_set.first() 
    trpinangsuran_obj.cbulan, 
    trpinangsuran_obj.ccicilanke, 

- Вы можете также использовать order_by (docs), чтобы решить, на каком основании вы хотите взять первый.

2) Если вы уверены, что всегда будет один Trpinangsuran объект для каждого Trpinjaman объекта, я рекомендую использовать OneToOneField вместо ForeignKey. Тогда это будет что-то вроде this-

datapinjam=Trpinjaman.objects.all() 
for obj in datapinjam: 
    obj.uid, 
    obj.cjenispinjaman, 
    obj.trpinangsuran.cbulan, 
    obj.trpinangsuran.ccicilanke, 

Надежда это помогает, также, пожалуйста, пройти через Джанго QuerySet docs.

+0

Спасибо @Saurabh Goyal. Он решил. Я использую obj.trpinangsuran_set.first(). Ccicilanke – Gusan

0

cbulan является частью модели Trpinangsuran. Поступая:

datapinjam = Trpinjaman.objects.all()

вы получите только объекты типа Trpinjaman которого только поля UID и cjenispinjaman.

Чтобы показать все элементы обеих моделей, которые необходимо сделать петлю над всеми элементами Trpinangsuran и всех элементов Trpinjaman

+0

Я хочу экспортировать данные в формат xls и объединить две модели в одну таблицу. – Gusan

Смежные вопросы