Как искать дубли в БД через форму перед добавлением?

Как сделать проверку по двум полям 'tin' и 'city'? Т.е., если при добавлении компании 100% совпадение в этих двух полях, пользователь получит сообщение, что клиент забронирован.

Например:
tin = 1234567890
city = Москва

tin = 1234567890
city = Саров

Такое добавление возможно, запрет на бронь только если оба поля совпадают.

models.py

from django.db import models
import datetime
from django.utils import timezone
import getpass
from django.contrib.auth.models import User

# Create your models here.
class factory(models.Model):
    city = models.CharField('Город', max_length=30)
    name = models.CharField('Наименование организации', max_length=50)
    tin = models.CharField('ИНН', max_length=12, unique=True)
    equipment = models.CharField('Оборудование', max_length=50)
    dealer = models.ForeignKey(User, verbose_name='Дилер', on_delete=models.CASCADE, max_length=50)
    createdate = models.DateField(verbose_name='Дата бронирования', default=(timezone.localtime(timezone.now()).strftime('%Y-%m-%d')), max_length=50)

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = 'Организация'
        verbose_name_plural = 'Организации'



forms.py

from .models import factory
from django.forms import ModelForm, TextInput

class FactoryForm(ModelForm):
    class Meta:
        model = factory
        fields = ['city', 'name', 'tin', 'equipment']

        widgets = {
            "city": TextInput(attrs={
                'class': 'search-city',
                'type': 'text',
                'list': 'city',
                'placeholder': 'Город (Например: Москва)'
            }),
            "name": TextInput(attrs={
                'class': 'search-llcname',
                'type': 'text',
                'placeholder': 'Наименование организации (Например: ООО "ЭИР-ПАРТ")'
            }),
            "tin": TextInput(attrs={
                'class': 'search-tin',
                'type': 'text',
                'maxlength': '12',
                'minlength': '10',
                'placeholder': 'ИНН'
            }),
            "equipment": TextInput(attrs={
                'class': 'search-equipment',
                'type': 'text',
                'placeholder': 'Поставляемое оборудование'
            }),
        }



views.py

from django.shortcuts import render, redirect
from .models import factory
from .forms import FactoryForm

# Create your views here.
def index(request):
    return render(request, 'main/index.html')


def factory(request):
    error = ''
    if request.method == 'POST':
        form = FactoryForm(request.POST)
        if form.is_valid():
            form.instance.dealer = request.user
            form.save()
        else:
            error = 'Ошибка обработки данных полей'
    
    form = FactoryForm()

    data = {
        'form': form,
        'error': error
    }

    return render(request, 'main/factory.html', data)


def myfactory(request):
    return render(request, 'main/myfactory.html')

  • Вопрос задан
  • 53 просмотра
Пригласить эксперта
Ответы на вопрос 1
@bacon
Проверять на наличие записи перед добавление или использовать get_or_create. Так же желательно сделать UniqueConstraint на эти два поля
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы