django 保存新模型将覆盖现有模型

wlwcrazw  于 2023-01-18  发布在  Go
关注(0)|答案(1)|浏览(147)

我有一个用来创建新模型的表单,但是每次我提交表单时,它都会覆盖数据库中唯一存在的模型。
我的表单视图:

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

这是数据库中唯一的现有模型:

当我使用表单保存新表单时:

它每次都用新创建的模型替换旧模型。

相关问题