Python 试图使用formset时,getting uu init uuuuuu()得到了一个意外的关键字参数';实例';
我需要使用formset,并成功地实现了它来添加对象 但现在我需要使用formset来编辑对象。我有以下建议: 型号.pyPython 试图使用formset时,getting uu init uuuuuu()得到了一个意外的关键字参数';实例';,python,django,Python,Django,我需要使用formset,并成功地实现了它来添加对象 但现在我需要使用formset来编辑对象。我有以下建议: 型号.py class Cell(models.Model): content = models.CharField(max_length=100) row = models.ForeignKey('Row') class Row(models.Model): pass class RowForm(forms.Form): cell = forms.
class Cell(models.Model):
content = models.CharField(max_length=100)
row = models.ForeignKey('Row')
class Row(models.Model):
pass
class RowForm(forms.Form):
cell = forms.CharField(label="Ячейка", max_length=100)
number_of_cells = 5
RowFormset = formset_factory(RowForm, extra=number_of_cells)
def edit_row(request, row_pk):
try:
row = Row.objects.get(pk=row_pk)
except Row.DoesNotExist:
return HttpResponse('Такая строка не существует')
if request.method == 'POST':
formset = RowFormset(request.POST, instance=row)
if formset.is_valid():
formset.save()
return HttpResponseRedirect(reverse('table:index'))
else:
formset = RowFormset(instance=row)
return render(request, 'table/edit-row.html', {'formset': formset})
forms.py
class Cell(models.Model):
content = models.CharField(max_length=100)
row = models.ForeignKey('Row')
class Row(models.Model):
pass
class RowForm(forms.Form):
cell = forms.CharField(label="Ячейка", max_length=100)
number_of_cells = 5
RowFormset = formset_factory(RowForm, extra=number_of_cells)
def edit_row(request, row_pk):
try:
row = Row.objects.get(pk=row_pk)
except Row.DoesNotExist:
return HttpResponse('Такая строка не существует')
if request.method == 'POST':
formset = RowFormset(request.POST, instance=row)
if formset.is_valid():
formset.save()
return HttpResponseRedirect(reverse('table:index'))
else:
formset = RowFormset(instance=row)
return render(request, 'table/edit-row.html', {'formset': formset})
视图.py
class Cell(models.Model):
content = models.CharField(max_length=100)
row = models.ForeignKey('Row')
class Row(models.Model):
pass
class RowForm(forms.Form):
cell = forms.CharField(label="Ячейка", max_length=100)
number_of_cells = 5
RowFormset = formset_factory(RowForm, extra=number_of_cells)
def edit_row(request, row_pk):
try:
row = Row.objects.get(pk=row_pk)
except Row.DoesNotExist:
return HttpResponse('Такая строка не существует')
if request.method == 'POST':
formset = RowFormset(request.POST, instance=row)
if formset.is_valid():
formset.save()
return HttpResponseRedirect(reverse('table:index'))
else:
formset = RowFormset(instance=row)
return render(request, 'table/edit-row.html', {'formset': formset})
当前我得到了TypeError:\uuu init\uuu()得到了一个意外的关键字参数“instance”
。考虑到使用模型表单可能不是一个选项,因为模型不知道我的单元格,或者我应该在一行中拥有的单元格数量(所以我可能必须坚持使用普通的forms.form),我如何完成我的任务
谢谢。之所以出现错误,是因为forms.Form不应将实例作为参数。 您需要使用一个单元格模型的表单集。我建议: forms.py:
from django.forms import modelformset_factory
from .models import Cell
CellFormSet = modelformset_factory(Cell, fields=('content ',))
def edit_row(request, row_pk):
try:
row = Row.objects.get(pk=row_pk)
except Row.DoesNotExist:
return HttpResponse('Такая строка не существует')
cells = Cell.objects.filter(row=row)
if request.method == 'POST':
formset = CellFormSet(request.POST, instance=cells)
if formset.is_valid():
formset.save()
return HttpResponseRedirect(reverse('table:index'))
else:
return render(request, 'table/edit-row.html', {'formset': formset})
else:
formset = CellFormSet(instance=cells)
return render(request, 'table/edit-row.html', {'formset': formset})
视图。py:
from django.forms import modelformset_factory
from .models import Cell
CellFormSet = modelformset_factory(Cell, fields=('content ',))
def edit_row(request, row_pk):
try:
row = Row.objects.get(pk=row_pk)
except Row.DoesNotExist:
return HttpResponse('Такая строка не существует')
cells = Cell.objects.filter(row=row)
if request.method == 'POST':
formset = CellFormSet(request.POST, instance=cells)
if formset.is_valid():
formset.save()
return HttpResponseRedirect(reverse('table:index'))
else:
return render(request, 'table/edit-row.html', {'formset': formset})
else:
formset = CellFormSet(instance=cells)
return render(request, 'table/edit-row.html', {'formset': formset})
您得到错误是因为forms.Form不应该将实例作为参数。 您需要使用一个单元格模型的表单集。我建议: forms.py:
from django.forms import modelformset_factory
from .models import Cell
CellFormSet = modelformset_factory(Cell, fields=('content ',))
def edit_row(request, row_pk):
try:
row = Row.objects.get(pk=row_pk)
except Row.DoesNotExist:
return HttpResponse('Такая строка не существует')
cells = Cell.objects.filter(row=row)
if request.method == 'POST':
formset = CellFormSet(request.POST, instance=cells)
if formset.is_valid():
formset.save()
return HttpResponseRedirect(reverse('table:index'))
else:
return render(request, 'table/edit-row.html', {'formset': formset})
else:
formset = CellFormSet(instance=cells)
return render(request, 'table/edit-row.html', {'formset': formset})
视图。py:
from django.forms import modelformset_factory
from .models import Cell
CellFormSet = modelformset_factory(Cell, fields=('content ',))
def edit_row(request, row_pk):
try:
row = Row.objects.get(pk=row_pk)
except Row.DoesNotExist:
return HttpResponse('Такая строка не существует')
cells = Cell.objects.filter(row=row)
if request.method == 'POST':
formset = CellFormSet(request.POST, instance=cells)
if formset.is_valid():
formset.save()
return HttpResponseRedirect(reverse('table:index'))
else:
return render(request, 'table/edit-row.html', {'formset': formset})
else:
formset = CellFormSet(instance=cells)
return render(request, 'table/edit-row.html', {'formset': formset})
以下代码正是我所需要的:
def edit_row(request, row_pk):
try:
row = Row.objects.get(pk=row_pk)
except Row.DoesNotExist:
return HttpResponse('Такая строка не существует')
cells = Cell.objects.filter(row=row)
contents = []
if request.method == 'POST':
formset = RowFormSet(request.POST)
if formset.is_valid():
for form in formset:
cd = form.cleaned_data
content = cd.get('cell')
contents.append(content)
for i, cell in enumerate(cells):
cell.content = contents[i]
cell.save()
return HttpResponseRedirect(reverse('table:index'))
else:
formset = RowFormSet()
return render(request, 'table/edit-row.html', {'formset': formset})
以下代码正是我所需要的:
def edit_row(request, row_pk):
try:
row = Row.objects.get(pk=row_pk)
except Row.DoesNotExist:
return HttpResponse('Такая строка не существует')
cells = Cell.objects.filter(row=row)
contents = []
if request.method == 'POST':
formset = RowFormSet(request.POST)
if formset.is_valid():
for form in formset:
cd = form.cleaned_data
content = cd.get('cell')
contents.append(content)
for i, cell in enumerate(cells):
cell.content = contents[i]
cell.save()
return HttpResponseRedirect(reverse('table:index'))
else:
formset = RowFormSet()
return render(request, 'table/edit-row.html', {'formset': formset})
你认为如果你向formset提供实例,它会是可编辑的吗?Alexey,我对formset的了解持续了6个小时。我不知道:)你们认为若你们向formset提供实例,那个么它会是可编辑的吗?Alexey,我对formset的了解持续了6个小时。我不知道:)mxle,谢谢你的帮助,但现在我得到了以下错误:
异常类型:AttributeError at/table/14138/Exception Value:'QuerySet'对象没有属性'pk'
我想原因是以下语句:formset=CellFormSet(request.POST,instance=cells)
您试图在哪里访问pk属性?我只在row=row.objects.get(pk=row\u pk)
中看到它。您可以尝试使用id,我不想访问它。如果我在edit_row
函数中注释If
语句,错误消息将消失。所以问题出在if
block.mxle的某个地方,谢谢你的帮助,但现在我得到了以下错误:异常类型:AttributeError at/table/14138/Exception Value:'QuerySet'对象没有属性'pk'
我想原因是以下语句:formset=CellFormSet(request.POST,instance=cells)
您试图在哪里访问pk属性?我只在row=row.objects.get(pk=row\u pk)
中看到它。您可以尝试使用id,我不想访问它。如果我在edit_row
函数中注释If
语句,错误消息将消失。所以问题出在if
块的某个地方。