簡體   English   中英

Django在同一模板上兩次表單

[英]django form twice on same template

我正在創建一個包含大量數據輸入的頁面。 我需要一個可以在一個模板中多次具有相同表單的部分

所以我有一個像這樣的模型:

class base(models.Model):
  name = models.CharField(max_length=50)
class other(models.Model):
  base = models.ForeignKey(base)

然后在模板中,我需要一次base ,然后(動態)需要多個others 截至目前,我正在執行類似這樣的模板

<div id="div_id_name" class="form-group">
  <label for="id_name" class="control-label  requiredField">
    Name
  </label>
  <div class="controls ">
    <input class="numberinput form-control" id="id_name" name="name" type="number" /> 
  </div>
</div>

唯一的問題是,使用多個相同形式的字段時,字段的名稱不是唯一的,因此我不知道每個單獨的字段如何相同。 有什么幫助嗎?

如果您需要以相同的形式獲得已知的次數,則可以通過在創建時將其傳遞給prefix='something'來添加前綴。 該前綴將附加到生成的字段名稱之前。

但對於您而言,您真正擁有的是一表格。 可能用於編輯相似對象的集合。 Django為此提供了modelformset_factory函數,您可以通過以下方式使用它:

from django.forms import modelformset_factory


OtherFormSet = modelformset_factory(Other)

# Creating an empty formset
formset = OtherFormSet()

# Creating a formset from a queryset
formset = OtherFormSet(queryset=Other.objects.filter(something='foobar'))

# Validating and saving
formset = OtherFormSet(request.POST)
if formset.is_valid():
    formset.save()

請參閱此處的完整文檔: https : //docs.djangoproject.com/en/dev/topics/forms/modelforms/#model-formsets


現在,從您的問題中,我相信您實際上是在編輯一個Base實例,以及鏈接到該Base實例的一組Other實例,對嗎? 這是一個很常見的情況,Django使用內聯表單集為其提供直接支持。

from django.forms import inlineformset_factory

InlineOtherFormSet = inlineformset_factory(Base, Other)
formset = InlineOtherFormSet(instance=Base.objects.get(pk=1))

同樣,該文檔非常清晰,因此,更多內容,我將讓您閱讀: https : //docs.djangoproject.com/en/dev/topics/forms/modelforms/#inline-formsets

您可以通過執行以下操作為表單添加前綴:

mother = PersonForm(prefix="mother")
father = PersonForm(prefix="father")

希望這可以為您提供進一步的幫助!

來源: https : //docs.djangoproject.com/en/dev/ref/forms/api/#prefixes-for-forms

暫無
暫無

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

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