有兩種相關模型顯示錶單的簡單方法嗎?在models.py文件考慮這些:如何從兩個相關模型中顯示formset?
class InvoiceList(models.Model):
invoice_number = models.IntegerField(default=0)
recipient = models.CharField(max_length=100)
class InvoiceItem(models.Model):
item_description = models.CharField(max_length=150)
list = models.ForeignKey(InvoiceList)
所以基本上,每張發票可以有一個或一個以上的發票項。
forms.py:
class InvoiceListForm(ModelForm):
class Meta:
model = InvoiceList
fields = ['invoice_number', 'recipient']
class InvoiceItemForm(ModelForm):
class Meta:
model = InvoiceItem
exclude = ('list',)
fields = ['item_description']
我的問題是在views.py
def update_edit(request, invoice_id):
a = get_object_or_404(InvoiceList, pk=invoice_id)
form = InvoiceListForm(instance=a)
formset = InvoiceItemForm(instance=a)
return render(request, 'file.html', {'invoice_info': form, 'items': formset})
file.html
<h1>Something Something Invoice</h1>
<form action="." name="stock_details" method="post">
{% csrf_token %}
{{ invoice_info.as_p }}
{% for item in items %}
{{ item.as_table }}<br>
{% endfor %}
</form>
以上沒有完全工作。它顯示invoice_info,但不顯示項目。我確信這是與實例調用錯誤的東西有關。任何人都可以協助謝謝!
urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
#This view is the main page when loaded
url(r'^$', views.index, name='index'),
#This view is when viewing the details
url(r'^invoice/(?P<invoice_id>[0-9]+)/$', views.detail, name='detail'),
#This view is when doing some function
url(r'^add_new_invoice/$', views.add_new, name='add_new'),
#This view is to delete an invoice
url(r'^delete/(?P<invoice_id>[0-9]+)/$', views.delete, name='delete'),
#This view is to update an invoice
url(r'^update/(?P<invoice_id>\d+)/(?P<item_id>\d+)/$', views.update_edit, name='update_edit'),
]
index.html的(這是發票列)
{% if latest_invoice_list %}
<h1>Invoices</h1><br>
<table border=1>
<tr>
<td width=50 align="center">Invoice Number</td>
<td width=200 align="center">Recipient</td>
<td align="center">Update/Resend</td>
<td align="center">Delete</td>
</tr>
{% for invoice in latest_invoice_list %}
<tr>
<td align="center">{{ invoice.invoice_number }}</td>
<td align="center"><a href="/invoice/{{ invoice.id }}/">{{ invoice.recipient }}</a></td>
<td align="center"><form action="{% url 'update_edit' invoice.id invoice.item_id %}" name="update" method="post" valign="bottom">{% csrf_token %}<input type="submit" value="Update"></form></td>
<td align="center"><form action="{% url 'delete' invoice.id %}" name="delete" method="post" valign="bottom">{% csrf_token %}<input type="submit" value="Delete"></form></td>
</tr>
{% endfor %}
</table>
<a href="{% url 'add_new' %}">Create a new invoice</a>
{% else %}
<p>No stocks were added. <a href="{% url 'add_new' %}">Create a new invoice now!</a></p>
{% endif %}
是的,我確實意識到def是非常裸露的視圖。一旦我得到它基本上工作,我會填寫與適當的檢查。 – Bob