2016-03-03 27 views
6

Benim models.py dosya içerir:Django on_delete = models.CASCADE SQL seviyesinde herhangi bir etkisi yoktur

class User(models.Model): 
    email = models.CharField(max_length=100, unique=True) 
    password = models.CharField(max_length=100) 
    create_time = models.DateTimeField(auto_now_add=True) 

class Session(models.Model): 
    user = models.ForeignKey(User, on_delete=models.CASCADE) 
    token = models.CharField(max_length=100, unique=True) 

i python manage.py makemigrations komuta ve ardından "= ON DELETE CASCADE" python manage.py sqlmigrate <app_name> <migration_name> i diyor bir şey görmüyorum

komutu zaman i python manage.py migrate yazdığınızda

Ancak göçler arızasız çalışır. Şimdi

i (SequelPro kullanarak) ve halen bir oturum girişi olan bir kullanıcı için bir satır silmeye MySQL tabloya giderseniz, ben aşağıdaki hatayı alıyorum: ". Tek satır kaldırılmadı yükle Bu arada içeriğin değişmediğinden emin olmak için tabloyu kullanın. Bu tablonun birincil anahtar (lar) ı içindeki olası hatalar için Konsolu kontrol edin! ". i oturumu masaya giderek kullanıcıyı tablodan kullanıcının satırını silmeye sonra bu kullanıcının oturumları silmek ve ne zaman

Şimdi, düzgün siler. Bu, ON DELETE = CASCADE'un aslında MySQL düzeyinde çalışmadığını gösterir.

Nasıl düzeltebilirim? docs (vurgu mayın) Gönderen

cevap

13

:

ForeignKey.on_delete

When an object referenced by a ForeignKey is deleted, Django will emulate the behavior of the SQL constraint specified by the on_delete argument.

Django aslında veritabanında bir ON DELETE maddesinin belirlemez. Birine ihtiyacınız varsa, bir RunSQL işlemini kullanarak manuel olarak ekleyebilirsiniz. Aynı dizin adını kullandığınızdan veya orijinal dizini kullandığınızdan emin olun. Daha sonra hatalarla karşılaşabilirsiniz.

+7

Böyle bir bummer :( –