2010-12-07 4 views
0

Je portage d'une application de base de données existante sur Django (tant mieux!), Et ont créé des modèles de Django comme suit:Django: supprimer les entrées orphelines M2M?

class Book(models.Model): 
    title = models.CharField(max_length=200) 
    author = models.ForeignKey(Author) 
    subject = models.ManyToManyField(Subject, related_name='subject') 
class Author(models.Model): 
    name = models.CharField(max_length=200) 
class Subject(models.Model): 
    name = models.CharField(max_length=200) 

J'ai peuplé les modèles à partir des données existantes. Le problème est que les données sont assez désordonnées, et il y a Author orphelins et Subject entrées, sans Book connexes.

Existe-t-il une manière sympa de pouvoir utiliser Django pour supprimer ces entrées Author et Subject? Quelque chose comme ça - mais cela ne fonctionne pas ...

orphan_authors = Author.objects.filter(book_set=None) 
for orphan in orphan_authors: 
    orphan.delete() 
orphan_subjects = Subject.objects.filter(book_set=None) 
for orphan in orphan_subjects: 
    orphan.delete() 

Ou devrais-je utiliser le SQL brut?

Répondre

2

Sur la base de votre modèle, quelque chose comme cela peut fonctionner:

authors = Author.objects.all() 
for a in authors: 
    books = Book.objects.filter(author=a) 
    if not books: 
     a.delete() 

Je n'ai pas testé, mais nous espérons qu'il vous donne une idée.

+0

Fonctionne magnifiquement, merci! – AP257

Questions connexes