2016-05-23 9 views
0

Wenn ich den folgenden Code in einer Ansicht habe ...Gibt es einen einfacheren Weg, um ein Django-Objekt in einer Ansicht mit POST-Parametern zu schaffen ..

enquiry = Enquiry(
        name=request.POST['name'], 
        email=request.POST['email'], 
        enquiry_input=request.POST['enquiry_input'], 
        enquiry_type=request.POST['enquiry_type'] 
       ) 

     enquiry.full_clean() 
     enquiry.save() 

gibt es eine Weise, die ich alle params passieren kann auf einmal? Ich weiß, dass du das in Schienen machen kannst. z.B. Object.create(object_params) Gibt es ein Django-Äquivalent? Zu Ihrer Information habe ich noch nicht ein Formular auf dem Frontend erstellt noch teste ich nur, dass eine POST-Anfrage eine Anfrage Objekt erstellt ...

Antwort

0

Sie kwargs Expansion Python verwenden können ** verwenden, dies zu tun:

enquiry = Enquiry(**kwargs) 

Aber nicht. Dies ist aus dem gleichen Grund, aus dem Rails Strong_params eingeführt hat, unsicher. Verwenden Sie stattdessen ein Formular.

+0

gotcha, ich frage mich, ob es möglich war, was dann die equiv der Schienen wäre strong_params. Vielen Dank! :) –

+0

Es ist gut zu sehen, dass "eine Form verwenden" Vorbehalt, aber der erste Teil dieser Antwort könnte Menschen dazu verleiten, diesen Ansatz trotz der Formen zu verwenden. – trojjer

1

Der korrekte und einfachste Weg ist die Verwendung model forms.

class EnquiryForm(ModelForm): 
    class Meta: 
     model = Enquiry 
     fields = ['name', 'email', 'enquiry_input', 'enquiry_type'] 

Sie müssen nicht sie dem Benutzer angezeigt werden, können Sie es nur für validation and saving verwenden:

def my_view(request): 
    form = EnquiryForm(request.POST) 
    if form.is_valid(): 
     form.save() 
     return # normally a redirect response here 
    else: 
     # react to incorrect data 
     # you may investigate form.errors 
     return # some error response 
+0

Modell bildet den ganzen Weg. Hier ist ein praktisches Werkzeug, wenn Sie auch die zeitsparenden klassenbasierten Ansichten erkunden möchten: https://ccbv.co.uk/projects/Django/1.9/django.views.generic.edit/CreateView/ Mit 'CreateView' , können Sie schnell eine Ansicht erstellen, die automatisch ein Objekt im POST erstellt, wenn das verknüpfte Formular gültig ist. Möglicherweise möchten Sie jedoch bei expliziten funktionsbasierten Ansichten bleiben. Django-Dokumentation: https://docs.djangoproject.com/en/1.9/ref/class-based-views/generic-editing/#createview – trojjer