使用formset更新多个对象

时间:2016-07-18 15:09:43

标签: django django-forms formset formsets

我是CS的第一年,如果我完全不清楚,请原谅我的无聊。

我的“产品”模型中有几个对象。现在我想在所有对象上更新相同的字段,'quantity'字段具有不同的值。但是,与updateview一样,我不想点击和退出每个产品,而是列出所有产品并为每个产品设置值,并同时更改它们。据我所知,“FormSet”可以解决这个问题吗?

我的类别模型如下所示(为产品指定)

class Category(models.Model):
    category = models.CharField(max_length=30)

    def __str__(self):
        return self.category

我的产品型号如下所示:

class Product(models.Model):
    title = models.CharField(max_length=200)
    description = models.CharField(max_length=200)
    category = models.ForeignKey(Category)
    price = models.DecimalField(max_digits=5, decimal_places=2)
    stock = models.PositiveIntegerField()

    def __str__(self):
        return self.title

我更新单品的更新视图如下所示:

class UpdateProductView(UpdateView):
    model = Product
    form_class = ProductForm
    template_name = "product_form.html"
    success_url = '/products'

class CreateCategoryView(FormView):
    template_name = "category_form.html"
    form_class = CategoryForm

我阅读了关于formset的文档,但是我必须承认我之后对如何实际使用它感觉不太聪明..任何人都可以伸出援手吗?

1 个答案:

答案 0 :(得分:0)

quantity模型上找不到Product字段,但正如我所见,您想要使用ModelFormSet。

# Generate your formset class with `modelformset_factory`
ProductFormSetClass = modelformset_factory(Product, fields=('quantity',))
# Now you can create your formset, bind data, etc
formset = ProductFormSetClass(request.POST)
formset.save()

链接的更多细节: https://docs.djangoproject.com/en/1.9/topics/forms/modelforms/#model-formsets

另外,不要忘记检查所有modelformset_factory个参数。