2013-01-25 4 views
0

내 앱에 다른 모델이 있는데 기본 모델에 다른 모델의 인스턴스가 여러 개 있습니다.편집보기에서 동적으로 추가 된 양식 세트를 미리 채우기

models.py :

class Person(models.Model): 
    ... 

class Pet(models.Model): 
    owner = models.ForeignKey(Person) 
    ... 

forms.py :

class PersonForm(forms.ModelForm): 
    class Meta: 
     model = Person 


PetFormSet = inlineformset_factory(Person, Pet, extra = 1) 

views.py :

def add_template(request): 
    person_form = PersonForm(prefix = 'person_form') 
    pet_form = PetFormSet(instance = Person(), prefix = 'pet_form') 
    ... # check is_valid(), render when no POST data is present, etc. 

포인트는 또한이 각각의 인스턴스를 저장할, 완벽하게 작동이며 해당 데이터베이스 테이블 등. jquery.formset-1.2.js를 사용하여 "add.html"형식의 동적 추가 삭제를 관리합니다. ".

나중에보기를 통해 저장된 정보를 편집하고 싶습니다. 요청에서 전달한 개체의 데이터를로드하고 데이터베이스에서 얻은 데이터로 서식 세트를 렌더링합니다 (관련 애완 동물 3 개가있는 경우). 편집중인 사람은 값이 표시된 "애완 동물"의 3 가지 양식 인스턴스를 표시합니다.

새 애완 동물을 추가하고 기존 애완 동물을 삭제하고 기존 필드 값을 변경하고 싶습니다.

FormSet 생성시 쿼리 세트를 사용해 보았지만 아무 것도 표시하지 않습니다.

이 문제를 완화하는 방법에 대한 아이디어가 있으십니까? 어쩌면 더 쉬운 formset 관리를 위해 앱을 사용하고 있을까요?

답변

0

내가 정확하게 문제를 이해하고 있는지 확실하지 않습니다 감사합니다.

def show_pets(request, person_id=None): 
person = get_object_or_404(Person.objects.select_related(), id=person_id) 
if request.method == 'POST': 
    person_form = PersonForm(request.POST, instance=person) 
    pet_formset = PetFormSet(request.POST, instance=person) 
    # Rest of your code here 
else: 
    person_form = PersonForm(instance=person) 
    pet_formset = PetFormSet(instance=person) 
return render_to_response('your_template.html', {'person_form': person_form, 
                 'pet_formset': pet_formset)}) 

그런 다음 당신은 당신의 템플릿에 두 폼을 렌더링하고 adddelete 기능

을 추가해야합니다 : 당신은 Person에 속한 모든 Pets을 표시하려면