Ich benutze das Standard-Admin-Dashboard von Django. Grundsätzlich möchte ich die delete_selected-Methode modellweise übersteuern, damit ich nach Datensätzen suchen kann, bevor das Löschen zugelassen wird.Override delete_selected, um nach Datensätzen zu suchen, die in anderen Tabellen in Django vorhanden sind 1.10
Mein models.py ist:
class Kind(models.Model):
name = models.CharField(max_length=50, unique=True)
addedby = models.ForeignKey(User,related_name='admin_kind')
createdon = models.DateTimeField(auto_now_add=True)
updatedon = models.DateTimeField(auto_now=True)
def __str__(self):
return self.name
class Meta:
ordering = ('name',)
class Item(models.Model):
name = models.CharField(max_length=50)
kind = models.ForeignKey(Kind,related_name="item_kind")
createdon = models.DateTimeField(auto_now_add=True)
updatedon = models.DateTimeField(auto_now=True)
def __str__(self):
return ' , '.join([self.kind.name, self.name])
class Meta:
ordering = ('kind', 'name',)
unique_together = (('name','kind'))
Nun, was ich will, ist, bevor eine Art gelöscht werden konnte, ich überprüfen möchten, ob es einen Bezugsdatensatz in Artikel ist. Wenn dies der Fall ist, löschen Sie es nicht.
Aber ich bin fest, wie über delete_selected Methode in admin.py überschrieben werden.
def delete_selected(self, request, obj):
'''
Delete Kind only if there are no items under it.
'''
for o in obj.all():
featuredItems = Item.objects.filter(kind=o).count()
if featuredItems == 0:
o.delete()
Allerdings zeigt django die Warnung und wenn ich ja klicken, löscht er die Art, obwohl es Aufzeichnungen für sie. Ich möchte die Löschung absolut blockieren.
Das ist wirklich toll !! Es hat tatsächlich den Trick gemacht. –