Django: сохранение экземпляра, только если он еще не существует - PullRequest
0 голосов
/ 08 мая 2020

Я хочу сохранить экземпляр Location только в том случае, если адрес еще не существует.

В настоящее время, когда вы пытаетесь сохранить с адресом, который уже существует, вы получаете ПЛОХОЙ ЗАПРОС.

Как я могу переопределить функцию сохранения для этого? И будет ли это правильный способ сделать это?

текущая модель:

class Location(models.Model):
    latitude = models.DecimalField(max_digits=9, decimal_places=6, null=True)
    longitude = models.DecimalField(max_digits=9, decimal_places=6, null=True)
    address = models.CharField(max_length=150, unique=True)
    field_quality = models.DecimalField(
        max_digits=3, decimal_places=1, null=True,)
    field_availability = models.DecimalField(
        max_digits=3, decimal_places=1, null=True,)
    place_id = models.CharField(max_length=200, null=True)

    def save(self, *args, **kwargs):
        if self.objects.filter(address=[self.address]).exists():
            pass
        else:
            super().save(*args, **kwargs)

1 Ответ

0 голосов
/ 08 мая 2020

Вы уже используете unique=True в модели. Это гарантирует, что у вас нет дубликатов адресов в этой таблице. Что касается плохого запроса, я думаю, что это правильная реализация, повторяющиеся адреса должны получить 400 плохих запросов. Теперь, если вы все еще хотите указать 200 для повторяющихся адресов, лучше обработать ошибку IntegrityError в представлении, перехватывая исключение с помощью try catch. Как это:

from django.db import IntegrityError

try:
     Location.objects.create(...)
except IntegrityError:
    # handle error
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...