Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 试图使用formset时,getting uu init uuuuuu()得到了一个意外的关键字参数';实例';_Python_Django - Fatal编程技术网

Python 试图使用formset时,getting uu init uuuuuu()得到了一个意外的关键字参数';实例';

Python 试图使用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.

我需要使用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})
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
块的某个地方。