2016-08-05 68 views
0

Ich möchte eine Methode verwenden, die ich verwenden könnte, um zu verhindern, dass ein Administrator eine SingleBook Instanz löscht, wenn is_available_returnedFalse ist. Die Logik ist, dass der Datensatz eines geliehenen Buches nicht gelöscht werden sollte, bis das Buch zurückgegeben wird. Ich würde eine angemessene Art bevorzugen, dies zu handhaben, anstatt eine Ausnahme zu machen. Jede Hilfe wäre willkommen.Wie verhindert man das Löschen von Modellinstanzen?

class SingleBook(models.Model): 
    serial_number = models.CharField(primary_key=True , max_length=150, blank=False) 
    book_id = models.ForeignKey(LibraryBook, on_delete=models.CASCADE) 
    is_available_returned = models.BooleanField(default=True) 

    def __unicode__(self): 
     return unicode(self.book_id) 

PS:

Django==1.9.8 
django-material==0.8.0 
django-model-utils==2.5.1 
psycopg2==2.6.2 
wheel==0.24.0 
+0

Haben Sie verwenden versuchen 'pre_delete' von die Django Signale? –

+0

pre_delete lässt einige Funktionalität hinzufügen, aber welche Funktionalität würde ich hinzufügen, um das Löschen zu verhindern? –

+0

Mögliches Duplikat von [Delete im Django-Modell verhindern] (http://stackoverflow.com/questions/4825815/prevent-delete-in-django-model) – solarissmoke

Antwort

1
from django.core.exceptions import ValidationError 
from django.db.models.signals import pre_delete 
from django.dispatch import receiver 

@receiver(post_save, sender=SingleBook) 
def delete_is_available_returned(sender, instance, **kwargs): 
    if instance.is_available_returned: 
     raise Exception('This book cant be deleted') 

Anhebung Ausnahme Signal sollte Bremse löschen() -Methode Ausführung während Ausnahme an den Ort zurückkehrt sie aufgerufen wurde