簡體   English   中英

Django:僅當實例不存在時才保存實例

[英]Django: Saving instance only if it does not exist already

如果地址不存在,我只想保存一個 Location 實例。

目前,當您嘗試使用已經存在的地址進行保存時,您會收到錯誤的請求。

如何覆蓋保存 function 來實現這一點? 這是正確的方法嗎?

當前 model:

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)

您已經在 model 中使用了unique=True 它將確保您在該表中沒有重復地址。 現在,關於錯誤請求,我認為這是一個正確的實現,重復的地址應該得到 400 個錯誤請求。 現在,如果您仍然想為重復地址提供 200,那么最好通過使用 try catch 捕獲異常來處理視圖中的IntegrityError錯誤。 像這樣:

from django.db import IntegrityError

try:
     Location.objects.create(...)
except IntegrityError:
    # handle error

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM