【发布时间】:2016-09-12 10:17:59
【问题描述】:
我有一个非常简单的模型......像这样:
class MachineTransTable(models.Model):
...
file = models.ForeignKey('File', related_name='the_file')
source = models.TextField()
target = models.TextField()
...
我想做的是有一个页面,其中用户在左侧有源(禁用),在右侧有目标(可编辑)和一个提交按钮,用于发布每个选定对象的编辑目标文本在 MachineTransTable 表中。以下是一些更多信息,可以更好地理解我的请求:
- 一个页面指的是单个文件,而 MachineTransTable 表中有多个(有时数百个)对象属于同一文件
- 每次用户编辑单个目标并点击该对象的提交按钮时,该对象都会在数据库中保存/更新(取决于对象的初始值),用户可以继续编辑所有其他对象对象...
- 在页面末尾有另一个提交按钮,用于在工作结束时退出页面(所有对象都已编辑/更新)。如果对象没有被编辑/更新,它会保持其原始值。
我尝试使用表单集,但我想这不是正确的选择...这是文件 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
使用这种方法,我有一个表单,当点击提交按钮时,所有相关对象都会立即保存/更新......
我可以做些什么来实现我上面描述的目标?谢谢
【问题讨论】:
-
所以你有两种提交按钮,一种用于单个字段,另一种用于页面。现在你想让这个按钮工作吗?
-
问题不是制作按钮...问题是如何拥有几个(最终数百个)表单...每个都有提交按钮...。我试图弄清楚如何用 django 做,但目前我不知道......页面按钮并不是一个真正的问题......我想通过一些编码我可以用 jquery 来做,但这不是我想做的。 .. 我更喜欢使用 django 提供服务器端解决方案。
标签: python django django-forms formset