Не удается получить доступ к значению в Django - PullRequest
0 голосов
/ 22 декабря 2011

Я пытаюсь получить доступ к bc_product.eng_name в следующем коде, но он не работает. Внешний ключ таблицы bc_product находится в таблице bc_invoice_product. Может ли кто-нибудь указать мне правильное направление?

View

def invoice_pdf(request, inv_no):

    inv = BC_Invoice.objects.select_related().get(invoice_no=inv_no)
    return render_to_pdf('bc_invoice_pdf.html', {'pagesize': 'A4',
                                                  'inv': inv})

Template

{% for item in inv.bc_invoice_product_set.all %}
    <tr>
        <td align=center>{{ item.unit_quantity }}</td>
        <td align=center>{{ item.bc_product.eng_name }}</td>
        <td align=center>{{ item.unit_price }}</td>
        <td align=center>{{ item.unit_amount }}</td>
    </tr>
{% endfor %}

UPDATE:

Модель

class BC_Product(models.Model):
    ............
    eng_name = models.CharField(max_length=200)

class BC_Invoice(models.Model):
    ............    
    product = models.ManyToManyField(BC_Product, through='BC_Invoice_Product')

class BC_Invoice_Product(models.Model):
    ............
    invoice = models.ForeignKey(BC_Invoice)
    product = models.ForeignKey(BC_Product)

Ответы [ 2 ]

1 голос
/ 23 декабря 2011

Мне кажется, что inv.bc_invoice_product_set.all возвращает BC_Invoice_Product модели, и в этом случае вы должны использовать {{ item.product.eng_name }}.

Из ваших моделей видно, что отношение внешнего ключа для BC_Product в BC_Invoice_Product равно product, а не bc_product.

Кроме того, соглашение должно иметь поле ForeignKey, названное именем модели в нижнем регистре, что, вероятно, облегчит отслеживание отношений.

0 голосов
/ 22 декабря 2011

Можете ли вы посмотреть значение вне поля зрения?Огонь сервера разработки, воткните:

import pdb; pdb.set_trace()

In after inv = ...

И немного изучите API запросов в консоли, чтобы увидеть, соответствует ли оноожидания.То, что у тебя есть, должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...