2013-08-10 2 views
0

'Category'모델의 모든 레코드를 편집 할 때 formset을 사용하고 싶습니다. 그리고이 두 가지 문제를 해결하는 방법을 알고 싶습니다Django Formset 문제 필드 선택 및 저장 중?

  1. 현재는 '언어'와 '부모'에 대한 선택 입력을 선택 입력을 제외하고, 초기 데이터와 모든 필드를 채 웁니다.
  2. 제출시 저장되지 않습니다.

models.py

class Category(models.Model): 
    ORDER = (
    ('1', '1'), 
    ('2', '2'), 
    ('3', '3')) 
    id = models.AutoField(primary_key=True) 
    language = models.ForeignKey(Language, null=False, blank=False) 
    name = models.CharField(max_length=256, null=False, blank=False) 
    parent = models.ForeignKey('self', null=True, blank=True, related_name='children') 
    slug = models.SlugField(unique=True, blank=False, null=False) 
    order = models.SmallIntegerField(null=True, blank=True, choices=ORDER) 
    allow_replies = models.BooleanField(default=False) 
    created_at = models.DateTimeField(auto_now=True) 

# Forms 
class CategoryForm(ModelForm): 
    class Meta: 
     model = Category 
     fields = ['language', 'name', 'parent', 'allow_replies', 'order'] 

views.py

def category_formset(request): 
    if is_admin_user(request): 
     CategoryFormSet = formset_factory(CategoryForm) 
     if request.method == 'POST': 
      formset = CategoryFormSet(request.POST) 
      if formset.is_valid(): 
       formset.save() 
     else: 
      formset = CategoryFormSet(initial=Category.objects.values()) 
     return render_to_response("pages/category_formset.html", 
            {"formset": formset, 'is_logged_in': is_logged_in(request)}, 
            context_instance=RequestContext(request)) 
    else: 
     return redirect('/', False) 

HTML 템플릿

<form action="/category/edit/" method="post"> 
    {% csrf_token %} 
    <table> 
     <tr> 
      <td>Language</td> 
      <td>Name</td> 
      <td>Parent</td> 
      <td>Allow Replies</td> 
      <td>Order</td> 
     </tr> 
     {% for form in formset %} 
     <tr> 
      {% for item in form %} 
       <td>{{ item }}</td> 
      {% endfor %} 
     </tr> 
     {% endfor %} 
    </table> 

    <input type="submit" value="Submit" /> 
</form> 
,174,

미리 감사드립니다.

+1

작은 팁 : modelfomset_factory – mariodev

+0

감사를 사용! 그것은 작동합니다! – ipegasus

답변

0

솔루션

모델

# ... 
def category_formset(request): 
    if is_admin_user(request): 
     CategoryFormSet = modelformset_factory(Category, exclude="slug", extra=0) 

     if request.POST: 
      formset = CategoryFormSet(request.POST) 
      if formset.is_valid(): 
       formset.save() 
       return redirect('/categories/') 
     else: 
      formset = CategoryFormSet(initial=Category.objects.values()) 
     return render_to_response("pages/category_formset.html", 
            {"formset": formset, 'is_logged_in': is_logged_in(request)}, 
            context_instance=RequestContext(request)) 
    else: 
     return redirect('/', False) 

템플릿

<form action="/category/edit/" method="post" enctype="multipart/form-data"> 
    {% csrf_token %} 
    {{ formset.management_form }} 
    {{ formset.errors }} 
    <table> 
     <tr> 
      <td>Language</td> 
      <td>Name</td> 
      <td>Parent</td> 
      <td>Allow Replies</td> 
      <td>Order</td> 
     </tr> 
     {% for form in formset %} 
     <tr> 
      {% for item in form %} 
       <td>{{ item }}</td> 
      {% endfor %} 
     </tr> 
     {% endfor %} 
    </table> 

    <input type="submit" value="Submit" /> 
</form>