在django模板中使用相关模型的字段

时间:2015-12-25 01:33:27

标签: python django django-forms django-templates

我有两个模型,InvoiceItem

class Invoice(models.Model):
    vendor = models.CharField(max_length=200)
    client = models.CharField(max_length=200)
    number = models.CharField(max_length=200)
    date = models.DateTimeField(max_length=200)
    due_date = models.DateTimeField()

    def __str__(self):
        return "Invoice number: {}".format(self.number)

class Item(models.Model):
    invoice = models.ForeignKey(Invoice, on_delete=models.CASCADE)
    description = models.TextField()
    quantity = models.DecimalField(max_digits=19, decimal_places=2)
    rate = models.DecimalField(max_digits=19, decimal_places=2)
    amount = models.DecimalField(max_digits=19, decimal_places=2)
    subtotal = models.DecimalField(max_digits=19, decimal_places=2)
    tax = models.DecimalField(max_digits=19, decimal_places=2)
    notes = models.TextField()
    terms = models.TextField()

    def __str__(self):
        return "{}".format(self.description)

这些是与模型相关的表格:

from django import forms
from .models import Invoice, Item

class InvoiceForm(forms.ModelForm):

    class Meta:
        model = Invoice
        fields = ('vendor','client', 'number', 'date', 'due_date')
        widgets = {
            'date': forms.TextInput(attrs={'class':'datepicker'}),
            'due_date': forms.TextInput(attrs={'class':'datepicker'}),
        }


class ItemForm(forms.ModelForm):

    class Meta:
        model = Item
        fields = ('description', 'quantity', 'rate', 'amount',
            'subtotal', 'tax', 'notes', 'terms')

我的问题是如何引用模板中ItemForm的某些字段?

因为我对InvoiceForm没有任何问题。例如,这有效:

<!-- Client -->
<div class="row">
    <div class="input-field col s4">
    <label for="{{ form.client.id_for_label }}">Client</label>
    {{ form.client }}
    </div>
    <div class="input-field col s4 offset-s4">
    <label for="{{ form.due_date.id_for_label }}">Due Date</label>
    {{ form.due_date }}
    </div>
</div>

views.py

def invoice_generator(request):
    form = InvoiceForm
    return render(request, 'invoiceapp/invoice_generator.html', {'form': form})

但我不知道如何引用ItemForm,例如这不起作用:

<div class="input-field col s5">
    {{ form.description }}
</div>  

1 个答案:

答案 0 :(得分:2)

在您的观点中,请执行以下操作:

def invoice_generator(request):
    data = {} 
    data['invform'] = InvoiceForm()
    data['itmform'] = ItemForm()
    return render(request, 'invoiceapp/invoice_generator.html', data)

在你的模板中:

<!-- Client -->
<div class="row">
    <div class="input-field col s4">
        <label for="{{ invform.client.id_for_label }}">Client</label>
        {{ invform.client }}
    </div>
    <div class="input-field col s4 offset-s4">
        <label for="{{ invform.due_date.id_for_label }}">Due Date</label>
        {{ invform.due_date }}
    </div>
    <!-- Item form -->
    <div class="input-field col s4 offset-s4">
        <label for="{{ itmform.due_description.id_for_label }}">Description</label>
        {{ itmform.description }}
    </div>
</div>