Django:删除M2M孤儿条目?

时间:2010-12-07 21:45:43

标签: django django-models

我正在将现有的数据库应用程序移植到Django(好多了!),并创建了Django模型,如下所示:

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)

我已经从现有数据中填充了模型。问题是数据非常混乱,并且存在孤立AuthorSubject个条目,没有相关的Book

我可以使用Django删除这些AuthorSubject条目吗?这样的事情 - 但这不起作用......

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()

或者我应该使用原始SQL吗?

1 个答案:

答案 0 :(得分:1)

根据您的模型,这样的事情可能有效:

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

我没有对此进行测试,但希望它能给你一个想法。