Nasıl veritabanı girdileri eşzamanlı değişikliklere karşı koruyabilirim Django:
Varsa bir yolu iki veya daha fazla kullanıcı tarafından aynı veri tabanına giriş eşzamanlı değişikliklere karşı korumak için mi?
Kullanıcı ikinci commit/kaydetme işlemi gerçekleştirmek için bir hata iletisi göstermek için kabul edilebilir olacak, ama veri sessizce yazılmasını değil.
Bir kullanıcı "Geri" düğmesini ya da sadece kendi tarayıcısı, sonsuza dek kilit bırakarak kapatın. kullanılması gibi giriş kilitleme bir seçenek değil bence
CEVAP
Bu Django kilitleme: iyimser şekilde yapıyorum
updated = Entry.objects.filter(Q(id=e.id) && Q(version=e.version))\
.update(updated_field=new_value, version=e.version 1)
if not updated:
raise ConcurrentModificationException()
Yukarıdaki kod Custom Manager bir yöntem olarak uygulanabilir.
Aşağıdaki varsayımlar yapıyorum:
- () filtre.() güncelleştirme tek bir veritabanı filtre tembel olduğu için . sorgu neden olur
- bir veritabanı sorgusu atom
Bu varsayımlar kimse önce giriş güncelleştirilmiş olduğundan emin olmak için yeterli. Eğer birden çok satır bu şekilde güncellendi, hareketleri kullanmanız gerekir.
UYARIDjango Doc:
Güncellemeyi unutmayın() yöntemi doğrudan bir SQL dönüştürülür açıklama. Toplu bir operasyondur doğrudan günceller. Herhangi bir çalışma yok () Kaydet modelleri, yöntemleri, ya da yayan pre_save veya post_save sinyaller
Nasıl django'bellek sadece test v...
Veritabanı sorgu Django: Nasıl tarih a...
Nasıl Django içinde PostgreSQL Veritab...
Nasıl veritabanı/model bir nesne kaldı...
Nasıl veritabanı indeksleme çalışır?...