我有一個非常簡單的模型......是這樣的:在同一頁上幾種形式使用Django
class MachineTransTable(models.Model):
...
file = models.ForeignKey('File', related_name='the_file')
source = models.TextField()
target = models.TextField()
...
我希望做的是有其中用戶已經在源上一個頁面左側(禁用),右側目標(可編輯)和一個提交按鈕,用於發佈MachineTransTable表中每個選定對象的已編輯目標文本。這裏有一些更多的信息,以便更好地理解我的要求:
- 一頁指的是單個文件,並有在MachineTransTable表對象的幾個(通常是數百)屬於同一個文件
- 每次用戶編輯單個目標並點擊該對象的提交按鈕,該對象被保存/更新(取決於對象的初始值)並且用戶可以繼續編輯所有其他對象...
- 在頁面末尾有另一個提交按鈕,用於在工作結束時從頁面退出(所有對象都已被編輯/更新)。如果一個對象沒有被編輯/更新,它會保持其原始值。
我試圖用一個formset,但我想這不是正確的選擇......這是文件forms.py
class SegmentForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(SegmentForm, self).__init__(*args, **kwargs)
if self.instance.id:
self.fields['source'].widget.attrs['readonly'] = True
class Meta:
model = MachineTransTable
fields = ['source','target',]
SegmentFormSet = inlineformset_factory(File, MachineTransTable, form=SegmentForm, fields=('source','target'), extra=0)
和view.py文件是:
class CatUpdateView(LoginRequiredMixin,UpdateView):
Model = MachineTransTable
context_object_name = 'file'
template_name = 'app_cat/cat.html'
form_class = SegmentForm
...
def get_context_data(self, **kwargs):
context = super(CatUpdateView, self).get_context_data(**kwargs)
formset = SegmentFormSet(instance=self.get_object())
context['formset_Segment'] = formset
return context
使用這種方法,我有一個單一的表格,當提交按鈕被擊中時,所有相關的對象被立即保存/更新...
我該怎麼做才能實現我的目標蜷縮在上面?謝謝
所以你有兩種提交按鈕,一個用於單個字段,另一個用於頁面。現在你想讓這個按鈕有效嗎? – Windsooon
問題是不做一個按鈕......問題是如何有幾個(最終成百上千)形式...每個人都有其提交按鈕....我試圖找出如何用Django來做到這一點,但目前我沒有線索......頁面按鈕不是一個真正的問題......我想用一些編碼我可以用jQuery來做,但這是不是我想做的事情......我更喜歡用django製作服務器端解決方案。 – Attilio