简体   繁体   中英

'form.save(commit=True)' not saving to database

I am trying to use a ModelForm to create a new model in my database. The thing is, it's not saving it to there when I call form.save(commit=True) .

I am using Elastic Beanstalk (the free tier) to host my website. I feel like this has something to do with the problem.

This is my forms.py :

from datetime import date
from .models import Itinerary

class CreateItinerary(forms.ModelForm):
    class Meta:
        model = Itinerary
        exclude = ["sights"]
    
    destination = forms.CharField(max_length=100)
    start = forms.DateField(widget=forms.NumberInput(attrs={'type': 'date'}), initial=date.today)
    end = forms.DateField(widget=forms.NumberInput(attrs={'type': 'date'}))

class FindPlaces(forms.Form):
    types = ((1, "restaurants"), (2, "attractions"), (3, "parks"), 
            (4, "national parks"), (5, "clothing stores"), (6, "malls"), 
            (7, "department stores"), (8, "stadiums"))

    place_type = forms.ChoiceField(choices=types)

This is my views.py file:

from django.views import generic
from .models import *
from .forms import *

class createItinerary(generic.TemplateView):
    template = "itineraries/create.html"

    def get(self, request, *args, **kwargs):
        return render(request, self.template, 
            {
                "form" : CreateItinerary(request.POST, request.FILES),
            })
    
    def post(self, request, *args, **kwargs):
        form = CreateItinerary(request.POST)

        if form.is_valid():
            new = form.save(commit=True)

            return redirect("/sights/")

        else:
            form = CreateItinerary

        return render(request, self.template, 
            {
                "form" : form,
            })

def plan_redirect(request, id):
    return redirect("/plan/%s" % id, request)

class plan(generic.TemplateView):
    find_places_form_class = FindPlaces
    template = "itineraries\plan.html"

    def get(self, request, id, *args, **kwargs):
        object = get_object_or_404(Itinerary, pk=id)

        return render(request, self.template, 
            {
                "find_places_form" : self.find_places_form_class(),
                "object" : object,
                "trip_length" : object.get_trip_length(),
            })

Has anyone else had this problem?

In generic.TemplateView you have only GET method to use. Try using the generic.FormView to implement this.

More Details: https://docs.djangoproject.com/en/4.1/ref/class-based-views/generic-editing/#django.views.generic.edit.FormView

I hope this will helpful.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM