2012-07-24 14 views
7

के साथ Django ModelForm को सहेजना यह शायद एक साधारण सरल सवाल है, लेकिन मुझे Django डॉक्स से इसे समझने की प्रतीत नहीं हो रही है। मैं एक बार में दो मॉडलफॉर्म को बचाने की कोशिश कर रहा हूं जिसमें एक दूसरे की विदेशीकी है। मुझे यकीन नहीं है कि ये सही ढंग से एक साथ जाने के लिए विचारों में तर्क कैसे लिखें।एक विदेशीकी

models.py

class Address(models.Model): 
    address = models.CharField(max_length=100) 
    city = models.CharField(max_length=50) 
    zipcode = models.PositiveIntegerField() 

class Store(models.Model): 
    name = models.CharField(max_length=100) 
    description = models.CharField(max_length=140, blank=True) 
    address = models.ForeignKey(Address, null=True) 

forms.py

class CreateStore1Form(forms.ModelForm): 
    class Meta: 
     model = Store 
     exclude = ('address',) 

class CreateStore2Form(forms.ModelForm): 
    class Meta: 
     model = Address 

views.py

@login_required 
def create(request): 
    if request.method == "POST": 
     form1 = CreateStore1Form(request.POST) 
     form2 = CreateStore2Form(request.POST) 
     if form1.is_valid() and form2.is_valid(): 
      store = form1.save(address) 
      new_address = form2.save(commit=False) 
      new_address.store = store 
      mew_address.save() 
    else: 
     form1 = CreateStore1Form() 
     form2 = CreateStore2Form() 
    return render(request, 'create.html', locals()) 

किसी भी मदद एपी होगा preciated। धन्यवाद!

+2

क्या यह मदद करता है [Django में एक पृष्ठ पर एकाधिक रूपों को संभालने का उचित तरीका] (http://stackoverflow.com/questions/1395807/proper-way-to-handle-multiple-forms-on-one-page- इन-डीजेंगो) –

+1

क्या कुछ उत्तर आपकी मदद करते हैं? –

+1

सभी सक्रिय स्टैक ओवरफ्लो उपयोगकर्ताओं के लिए, यदि आपको कोई समाधान मिलता है जो काम करता है, तो कृपया उत्तर को स्वीकार के रूप में चिह्नित करें, ताकि अगर उत्तर की आवश्यकता नहीं है तो लोग जवाब देने में समय नहीं लगाते हैं। –

उत्तर

14

Django उपयोग के इस मामले inline formsets प्रदान करता है:

इनलाइन formsets मॉडल formsets के शीर्ष पर एक छोटा सा अमूर्त परत है। ये संबंधित वस्तुओं के साथ विदेशी कुंजी के माध्यम से काम करने के मामले को सरल बनाते हैं।

forms.py

class AddressForm(forms.ModelForm): 
    class Meta: 
     model = Address 

class StoreForm(forms.ModelForm): 
    class Meta: 
     model = Store 
     exclude = ('address',) 

views.py

from django.forms.models import inlineformset_factory 

@login_required 
def create(request):  
    AddressInlineFormSet = inlineformset_factory(Address, Store, form=AddressForm) 

    if request.method == 'POST': 
     storeForm = StoreForm(request.POST) 

     if storeForm.is_valid(): 
      new_store = storeForm.save() 
      addressInlineFormSet = AddressInlineFormSet(request.POST, request.FILES, instance=new_store) 

      if addressInlineFormSet.is_valid(): 
       addressInlineFormSet.save() 
       return HttpResponseRedirect(reverse('some_happy_customer_url')) 

      else: 
       classificationformset = ClassificationInlineFormSet(request.POST, request.FILES, instance=new_store) 
    else: 
      addressInlineFormSet = AddressInlineFormSet() 
      storeForm = StoreForm() 
    return render(request, 'create.html', locals()) 

कृपया यह भी देखना अधिक जानकारी के लिए इस question

संबंधित मुद्दे