2013-01-24 18 views
6

Modellerim var.Mysql veritabanımdaki bir Görünümü temsil eden alt sınıf (yani yönetilen = Yanlış). Benim birim testleri çalıştırırkendjango, model örneğinin silinmesini engeller

Ancak, alıyorum: Bu silme isteği

DatabaseError: (1288, 'The target table my_view_table of the DELETE is not updatable')

kaynak yabancı tuşu aracılığıyla (dolaylı) 'dir. Benim testlerde, ben ActualTableModel örneği siliyorum ait söküm boyunca

class MyViewModel(models.Model): 
    problematic_field = models.ForeignKey(ActualTableModel) # specifying on_delete=models.SET_NULL simply replaces the DELETE error with an UPDATE one 

ve belgelenmiş davranış ilerlemekte olduğunun django görüntülenir:: I (basitleştirilmiş) var

When Django deletes an object, it emulates the behavior of the SQL constraint ON DELETE CASCADE -- in other words, any objects which had foreign keys pointing at the object to be deleted will be deleted along with it.

Bu neden olmak gibi görünüyor (yönetilen = Yanlış) Görünümüne uygulandığında sorunlar.

ben silinmesini önlemek için silme yöntemi geçersiz kılmasını denedim:

class MyViewModel(models.Model): 
    ... 
    def delete(self, *args, **kwargs): 
     pass # deletion of a view row is never valid 

ama bu sorunu çözmek vermedi.

Bu davranışı nasıl önleyebilirim?

cevap

7

Belki de çeşitli on_delete argument options deneyebilirsiniz?

Yani .: dokümantasyon bağlantıdan

problematic_field = models.ForeignKey(ActualTableModel, on_delete=models.PROTECT) 
+1

teşekkürler. On_delete = models.SET_NULL'ı denedim, ancak DO_NOTHING'i gözden kaçırdım. İkincisi hatayı düzeltir. – sapi

İlgili konular