18

GenericForeignKey içerik türlerini kullanan herhangi bir modele yorum ekleyebilen özel bir yorum oluşturma sistemi oluşturuyorum.Silmek için neden GenericForeignKey kaskadlamıyor?

class Comment(models.Model): 
    body = models.TextField(verbose_name='Comment') 
    user = models.ForeignKey(User) 
    parent = models.ForeignKey('self', null=True, blank=True) 
    created = models.DateTimeField(auto_now_add=True) 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    content_object = generic.GenericForeignKey('content_type', 'object_id') 

Bu açıklama takılır modeli silinir ne zaman, silme basamakla ve yanı yorumunu kaldırmalısınız benim anlaşılmasıdır.

Maalesef bu olmuyor ve stumped. Varsayılan silme davranışının değişmesinin yaygın bir nedeni var mı?

cevap

24

Hayır, dokümantasyon olduğunu söylemez. GenericForeignKey ters tarafını yani - - jenerik FK ile öğesi silinir sonra zaman GenericRelation ile öğesi de silinir Ne diyor bir model üzerinde bir GenericRelation tanımlarsanız olmasıdır. ForeignKey aksine

, GenericForeignKey bu davranışını özelleştirmek için bir on_delete argüman kabul etmez; istenirse, sen GenericRelation kullanmayarak sadece kaskad-silinmesini önleyebilirsiniz ve alternatif davranış pre_delete sinyali üzerinden sağlanabilir.

+0

sayesinde ben belgelerin parçasını yanlış yorumlamak ve buna varsayılan olarak basamakla anlamına geliyordu üstlendi. – Soviut

+0

Çok teşekkür ederim, gözlerim nerede ... – valex

+0

Bence django docs bunu başka bir şekilde belirtmeli. "GenericForeignKey, kasıtlı olarak silme yapmaz, değeri null olarak ayarlar. İlgili modelde GenericRelation kullanılıyorsa SADECE cascades." Bu, normal yabancı anahtarlarda varsayılan olarak basamaklı silme elde ettiğimiz için gereklidir. –

İlgili konular