Перед сохранением формы проверьте, существует ли в базе данных запись с несколькими полями - PullRequest
0 голосов
/ 08 мая 2020

У меня есть эта модель:

class Venue(models.Model):
    venue_name = models.CharField(max_length=50)
    venue_city = models.CharField(max_length=50)

, и у меня есть форма, в которой пользователи вводят название места проведения и город. Я хотел бы проверить, существует ли уже запись в базе данных, причем оба поля уже заняты в одной записи. Например, в разных городах может быть одно и то же название места проведения.

Я добавил чек в мои формы.py:

class VenueForm(forms.ModelForm):
    class Meta:
        model = Venue
        fields = ['venue_name', 'venue_city', 'venue_country']

    def save(self, commit=True):
            venue = super(VenueForm, self).save(commit=False)
            venue_name = self.cleaned_data['venue_name']
            venue_city = self.cleaned_data['venue_city']
            if Venue.objects.filter(venue_city=self.cleaned_data['venue_city']).exists() and Venue.objects.filter(venue_name=self.cleaned_data['venue_name']).exists(): # I know this doesn't work: it's as far as I can get.
                logger.error(venue_name + ' already exists')
            if commit:
                venue.save()

            return venue

и, наконец, мой view.py:

def venue_add_view(request):

    form_venue = VenueForm(request.POST or None)

    if form_venue.is_valid():

        form_venue.save()

    context = {
        'form_venue': form_venue,
    }

    return render(request, "venue-add.html", context)

Теперь он успешно проверяет, существует ли уже название или город. Я хочу спросить базу данных, существуют ли они в одной записи. Как я могу это сделать?

1 Ответ

1 голос
/ 08 мая 2020

Вы можете просто добавить оба утверждения в один и тот же фильтр:

Venue.objects.filter(venue_city=self.cleaned_data['venue_city'], venue_name=self.cleaned_data['venue_name']).exists()

Это проверяет, существует ли объект Venue с городом и названием cleaned_data.

...