2016-07-18 8 views
0

나는 CS가 1 년이므로 완전히 불명확 한 경우 내 호언을 용서할 수 있습니다.formset을 사용하여 여러 객체 업데이트

"제품"모델의 개체가 여러 개 있습니다. 이제는 모든 객체에서 동일한 필드를 업데이트하고 '수량'필드는 다른 값으로 업데이트하려고합니다. 그러나 각 제품을 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에 대한 설명서를 읽었지만,별로 느끼지 않았다는 것을 인정해야합니다. 나중에 실제로 사용하는 방법에 대해 더 똑똑하게. 누구든지 손을 댈 수 있습니까?

답변

0

Product 모델에 quantity 필드가 없지만, 내가 볼 수 있듯이 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 인수를 검사하는 것을 잊지 마세요.

+0

아, 그렇습니다. 제가 의미하는 바는 '재고품'과 수량이 아닙니다. 이 기능을 별도의 기능으로 정의합니까, 아니면이 기능을 새로 볼 수 있습니까? D – PaFko

+0

Django의 폼처럼 작동합니다. 데이터를 바인딩하고, .is_valid() 메소드 등으로 formset 내부의 각 폼의 유효성을 검사 할 수 있지만 먼저 선언하지 않고 클래스를 생성해야합니다. 그것이 어떻게 작동 하는지를 정말로 알고 싶다면, 간단한 견해로 그것을 직접 구현하십시오. 여기 워드 프로세서의 예제 https://docs.djangoproject.com/en/1.9/topics/forms/formsets/#using-a-formset-in-views-and-templates 그런 다음'django의 일반 뷰를 사용해 볼 수 있습니다 -extra-views' 앱 –