簡體   English   中英

如何在Django內聯表單集中標記表單實例?

[英]How to label a form instance within a django inline formset?

我認為這是很常見的情況,但似乎無法繞開它。 我已經使用django.forms.inlineformset_factory創建了一個表單表單集,該表單集允許用戶更改外鍵對象的各個方面,並且這些方面都工作正常。

麻煩的是,我希望能夠在表單集中標記所有這些表單(注意,不是每個表單中的字段,而是每個表單所基於的外鍵模型)。 例如,如果我在docs中調整示例:

from django.db import models
from django.forms import inlineformset_factory

class Author(models.Model):
    name = models.CharField(max_length=100)

class Book(models.Model):
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    title = models.CharField(max_length=100)
    pages = models.IntegerField(default=0)

我創建了表單集,以允許人們更改Daffy Duck的任何書籍中的頁數:

BookFormSet = inlineformset_factory(Author, Book, fields=('pages',))
author = Author.objects.get(name='Daffy Duck')
formset = BookFormSet(instance=author)

說Daffy寫了五本書,這些書顯示為整數條目,所有標簽都標記為“ Pages”,而沒有提及每個書指向的書。 我如何在表格的標題上加上書名,以便他們知道要更改的內容? 我嘗試過將字典傳遞給inlineformset_factory函數的labels字段,但是沒有用。

首先,請注意,內聯表單集是模型表單集的小包裝,因此適用於后者的大部分內容都適用於前者。 模型表單集是一種呈現一組表單的方法,每個表單都與模型實例相關。 因此,您試圖同時考慮多個抽象級別。

接下來,請參閱“ 在視圖和模板中使用表單集 ”的文檔,該文檔描述了編寫自己的模板來呈現表單集:

<form method="post" action="">
    {{ formset.management_form }}
    <table>
        {% for form in formset %}
        {{ form }}
        {% endfor %}
    </table>
</form>

因此,如果要標記每種形式(記住每個形式本身都是描述一個模型實例的ModelForm) ,則可以在{% for %}塊中訪問該形式:

<form method="post" action="">
    {{ formset.management_form }}
    <table>
        {% for form in formset %}
        <tr><th>{{ form.instance.foo_field }}</th></tr>
        {{ form }}
        {% endfor %}
    </table>
</form>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM