我有一个用来创建新模型的表单,但是每次我提交表单时,它都会覆盖数据库中唯一存在的模型。
我的表单视图:
class createItinerary(CreateView):
template = "create.html"
form_class = CreateItineraryForm
def get(self, request, *args, **kwargs):
form = self.form_class()
return render(request, self.template, {"form": form})
def post(self, request, *args, **kwargs):
super().__init__(*args, **kwargs)
form = self.form_class(request.POST)
if form.is_valid():
destination = form.cleaned_data.get("destination")
trip_length = form.cleaned_data.get("trip_length")
start = form.cleaned_data.get("start")
end = form.cleaned_data.get("end")
sights = form.cleaned_data.get("sights")
new = Itinerary(destination=destination,
trip_length=trip_length, start=start, end=end)
new.sights.set(sights)
new.save()
return redirect("/")
else:
form = CreateItineraryForm
return render(request, self.template, {"form" : form})
我的forms.py:
from django import forms
from django.forms.widgets import *
from itineraries.models import Itinerary
from sights.models import Sight
sight_choices = ()
for sight in Sight.objects.all():
new_sight = (("%s" % sight.name, "%s" % sight.name))
sight_choices += new_sight
class CreateItineraryForm(forms.ModelForm):
class Meta:
model = Itinerary
exclude = []
destination = forms.CharField(label="Destination", max_length=100)
start = forms.DateField(widget=NumberInput(attrs={"type" : "date"}))
end = forms.DateField(widget=NumberInput(attrs={"type" : "date"}))
sights = forms.ModelMultipleChoiceField(
queryset=Sight.objects.all())
我的models.py:
from django.db import models
from sights.models import Sight
import datetime
class Itinerary(models.Model):
id = models.AutoField(primary_key=True, default=0)
destination = models.CharField(max_length=100, null=False)
trip_length = models.IntegerField(null=False)
start = models.DateField()
end = models.DateField()
sights = models.ManyToManyField(Sight)
def __str__(self):
trip_name = "%s in %s days" % (self.destination, self.trip_length)
return trip_name
这是数据库中唯一的现有模型:
当我使用表单保存新表单时:
它每次都用新创建的模型替换旧模型。
1条答案
按热度按时间nhaq1z211#
从模型中的
id
中删除default=0
。