Django - сложный запрос, сопоставляющий 2+ одинаковых поля в экземпляре модели? - PullRequest
0 голосов
/ 07 августа 2020

Недавно мне поставили задачу на эту неделю, которая дала мне тяжелые времена. учитывая модель базы данных здесь ...

class Company(models.Model):
    employee = models.ManyToManyField(Account, blank=True)
    name = models.CharField(max_length=256, null=True, blank=True)
    street = models.CharField(max_length=256, null=True, blank=True)
    city = models.CharField(max_length=256, null=True, blank=True)
    state = models.CharField(max_length=256, null=True, blank=True)
    country = models.CharField(max_length=256, null=True, blank=True)
    primary_email = models.EmailField(max_length=200, null=True, blank=True)
    website = models.URLField(max_length=256, null=True, blank=True)

и представление здесь ...

def check_company(request):
    if request.method == 'GET':

        company = request.GET.get('company')

        check_comp = Company.objects.filter(name=company.title()).count()

        if check_comp > 1:
            res = 'false'
        else:
            res = 'true'

        return HttpResponse(res)

прямо сейчас функция check_company проверяет, есть ли уже название компании в база данных, и если это так, он предупреждает пользователя о том, что компания уже есть в базе данных.

Теперь я пытаюсь изменить это таким образом, чтобы проверять, является ли название компании И любое ДРУГОЕ поле (веб-сайт , primary_email, street, city) уже вместе в базе данных Company.

Итак, (name + website) или (name + primary_email), или (name + street) or (name + city)

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 07 августа 2020

простейшее решение, которое вы получите, - это использовать уникальные вместе в метатеге

class Company(models.Model):
    employee = models.ManyToManyField(Account, blank=True)
    name = models.CharField(max_length=256, null=True, blank=True)
    street = models.CharField(max_length=256, null=True, blank=True)
    city = models.CharField(max_length=256, null=True, blank=True)
    state = models.CharField(max_length=256, null=True, blank=True)
    country = models.CharField(max_length=256, null=True, blank=True)
    primary_email = models.EmailField(max_length=200, null=True, blank=True)
    website = models.URLField(max_length=256, null=True, blank=True)
    
    class Meta:
           unique_together = ("name", "website","primary_email","street","city")

посмотрите, как реализовать, из документации django https://docs.djangoproject.com/en/dev/ref/models/options/#unique -всего

РЕДАКТИРОВАТЬ: 1

you can also provide list like this 
unique_together = [["name", "website"],
["name","primary_email",],
["name", "street"],
["name","city"]]
...