2013-01-04 3 views
0

J'ai 4 modèles dont j'ai besoin pour stocker des données à la fois. Pour cela je pense en utilisant ModelForms.Django - Comment travailler avec plusieurs ModelForm dans le même formulaire?

J'ai testé avec 2 ModelForm en même temps, mais cela ne fonctionne pas. Voici le code.

Modèle:

class Main(models.Model): 
    section    = models.ForeignKey(Section) 
    user    = models.ForeignKey(User) 
    title    = models.CharField(max_length=250) 
    date_inserted  = models.DateTimeField(auto_now_add=True) 
    date_last_update = models.DateTimeField(auto_now=True) 

    def __unicode__(self): 
    return self.title 

    # To order in the admin by name of the section 
    class Meta: 
    ordering = ['date_inserted'] 


class BicycleAd(models.Model): 
    main    = models.ForeignKey(Main) 
    bicycleadtype  = models.ForeignKey(BicycleAdType) 
    bicycleaditemkind = models.ForeignKey(BicycleAdItemKind) # MPTT Model 
    bicycleadcondition = models.ForeignKey(BicycleAdCondition) 
    country    = models.ForeignKey(GeonamesCountry)  
    city    = models.ForeignKey(GeonamesLocal) 
    date_inserted  = models.DateTimeField(auto_now_add=True) 
    date_last_update = models.DateTimeField(auto_now=True) 

    # To order in the admin by name of the section 
    class Meta: 
    ordering = ['date_inserted'] 

formes:

class MainForm(forms.ModelForm): 
    class Meta: 
    model = Main 
    exclude = ('user', 'section') 

class BicycleAdForm(forms.ModelForm): 
    class Meta: 
    model = BicycleAd 
    exclude = ('main', 'bicycleadtype', 'bicycleaditemkind', 'bicycleadcondition', 'city') 

Vue:

def submit_data_entry_view(request): 
    form_main  = MainForm(request.POST) 
    form_bicyclead = BicycleAdForm(request.POST) 

    return render_to_response('app/submit_data_entry.html', {'form_main': form_main, 'form_bicyclead': form_bicyclead}, context_instance=RequestContext(request)) 

Modèle:

<form method="post" action=""> 
    {{form_main}} 
    {{form_bicyclead}} 
</form> 

À la fin je reçois seulement le "form_bicyclead" édité dans le navigateur? Comment puis-je obtenir les deux formulaires à la fois?

Cordialement,

+0

Quelle version de Django utilisez-vous? –

+0

Salut! J'utilise 1.4.2 –

+0

Ensuite, je vous implorerais de revoir votre code et de le mettre à jour en utilisant les vues basées sur la classe, ils prennent un peu d'apprentissage, mais ils brillent vraiment quand vous les maîtrisez. Juste un conseil, je vais voir si je peux revenir à vous avec une réponse! :) –

Répondre

3

Utilisez-vous des submit_data_entry_view pour rendre les formes trop? ne devrait-il pas être comme -

def submit_data_entry_view(request): 

    if request.method == 'POST': #form submit 
     form_main  = MainForm(request.POST) 
     form_bicyclead = BicycleAdForm(request.POST) 

     #now process and save the form 

     return <whatever_you_want> 
    elif request.method == 'GET': #first time rendering the form 
     form_main  = MainForm() 
     form_bicyclead = BicycleAdForm() 

     return render_to_response('app/submit_data_entry.html', {'form_main': form_main, 'form_bicyclead': form_bicyclead}, context_instance=RequestContext(request)) 
+1

Merci pour la réponse. Ça fonctionne. –

Questions connexes