2014-05-10 1 views
0

J'ai un Django generic create viewDjango Créer Voir les paramètres sur la forme

class TestCreateView(CreateView): 
    form_class = TestCreateForm 

##forms.py 
class TestCreateForm(forms.ModelForm): 
    class Meta: 
     model = Test 

    def __init__(self, user, *args, **kwargs): 
     super(TestCreateForm).__init__(*args, **kwargs) 
     self.fields['test_field'] = Testing.objects.filter(user=user) 

Dans les vues sur la base de la fonction que je ferais comme ceci:

form = TestCreateForm(request.user) 

maintenant sur la vue basée sur la classe générique dois-je remplacer , get et post méthode juste pour cela?

+1

Vous devriez vérifier ['CreateView' sur CCBV] (http://ccbv.co.uk/CreateView/). C'est une bonne référence pour trouver ce qui est disponible sur les vues basées sur les classes de Django. J'espère que tu trouves cela utile. * Divulgation complète: j'ai écrit cet outil. * – meshy

Répondre

4
class TestCreateView(CreateView): 
    form_class = TestCreateForm 

    def get_form_kwargs(self, **kwargs): 
     form_kwargs = super(TestCreateView, self).get_form_kwargs(**kwargs) 
     form_kwargs["user"] = self.request.user 
     return form_kwargs 
0

Puisque vous devez ajouter l'argument dans la initialisation (chaque fois que vous instancier la forme) ce que vous pouvez faire est passer outre les get_form_kwargs de la classe CreateView:

class TestCreateView(CreateView): 
form_class = TestCreateForm 

    def get_form_kwargs(self): 
    kwargs = { 
     'initial': self.get_initial(), 
     'prefix': self.get_prefix(), 
     'user': self.request.user 
    } 

    if self.request.method in ('POST', 'PUT'): 
     kwargs.update({ 
      'data': self.request.POST, 
      'files': self.request.FILES, 
     }) 
    return kwargs