Модельный объект не сохраняется - PullRequest
0 голосов
/ 15 июня 2019

Я изменил структуру своей модели, и мне пришлось удалить и сбросить базу данных, чтобы применить миграции. При этом способ, которым я сохранял свой объект до того, как перестал работать.

Я попытался изменить свой подход, используя form.instance вместо self.object, но ничего не произошло. Я не уверен, зависит ли это от используемого мной метода или я что-то изменил в базе данных. Я новичок в Django и буду очень признателен за советы.

views.py

class SearchCreate(CreateView):
    model = Search
    form_class = SearchForm
    template_name = 'home.html'

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.user = self.request.user
        self.object.uuid =  self.object.depPlace1 + '&' + self.object.depPlace2 + '&' + str(self.object.depDate) + '&' + str(self.object.retDate)
        if not Search.objects.filter(uuid=self.object.uuid, user=self.object.user).exists():
            self.object.save()

        return super(SearchCreate, self).form_valid(form)

    def get_success_url(self):
        uuid =  self.object.uuid 
        return reverse('results', kwargs={'uuid': uuid})

models.py

class Search(models.Model):
    depPlace1 = models.CharField(max_length=10)
    depPlace2 = models.CharField(max_length=10)
    depDate = models.DateField()
    retDate = models.DateField()
    user = models.ForeignKey(User, on_delete = models.CASCADE)
    uuid = models.CharField(primary_key=True, max_length=200, default="SEARCH")
    range1 = models.IntegerField(blank=True, null=True)
    range2 = models.IntegerField(blank=True, null=True)

    def __str__(self):
        return self.uuid


class SearchForm(forms.ModelForm):

    def clean(self):
        cleaned_data = super(SearchForm, self).clean()
        range1 = cleaned_data.get('range1' or None)
        range2 = cleaned_data.get('range2' or None)

        val.clean_integer(self, range1, 'range1')
        val.clean_integer(self, range2, 'range2')
        return cleaned_data

    class Meta:
        model = Search
        unique_together = (('user', 'uuid'),)
        labels = {
            'depPlace1' : 'Departure 1',
            'depPlace2' : 'Departure 2',
            'depDate' : 'Outbound',
            'retDate' : 'Inbound',
            'range1' : 'Max Price 1',
            'range2' : 'Max Price 2'
        }

        widgets = {
            'depDate': forms.DateInput(attrs={'class':'datepicker'}),
            'retDate': forms.DateInput(attrs={'class':'datepicker'})

        }
        fields = ['depPlace1', 'depPlace2', 'depDate', 'retDate', 'range1', 'range2']

...