2016-04-21 3 views
-1

下のモデルでは、管理者がアーティストを削除すると、関連するすべての曲が確認され、削除されます。ただし、管理者から曲を削除すると、アーティストが曲に関連する項目がなくなった場合でも、アーティストを削除したいと考えています。このためのモデルオプションは管理者にありますか?他のモデルに関連するForeignKey項目がなくモデルインスタンスを削除するDjango?

これはModelAdminの内部ではなくカスタムビューでどのように行うべきですか?

class Artist (models.Model): 
    name = models.CharField(max_length=100) 

    def __str__(self): 
     return self.name 

class Genre (models.Model): 
    name = models.CharField(max_length=100) 
    def __str__(self): 
     return self.name 

class Song (models.Model):  
    artist = models.ForeignKey(Artist, on_delete=models.CASCADE) 
    genre = models.ForeignKey(Genre, null=True, blank=True, on_delete=models.SET_NULL) 
    title = models.CharField(max_length=100) 
    mix = models.CharField(max_length=100, blank=True) 

    def __str__(self): 
     return self.title 
+0

'pre_delete'シグナルを使用してアーティストを削除したい場合があります – karthikr

答えて

0

Songdelete方法でこれを行うことができます。

def delete(*args, **kwargs): artist = self.artist super(Song, self).delete(*args, **kwargs) if artist.song_set.count() == 0: artist.delete()

または類似のもの。

+0

なぜこれがダウン投票されたのかの文脈はありません。このルールが常にSong.deleteの場合は、これは有効かつ直接的なアプローチです。これが管理者だけで一般的なケースではない場合、私はその問題を見ることができます。 – Shay

関連する問題