如何在Django模型中使用另一个类对象作为ManyToMany确定特定对象?

时间:2019-03-15 14:12:30

标签: django django-models relationship

如何使用另一个对象确定对象,如下所示?

for author in book.authors.all():
    author.some_func(book)

鉴于我们的使用方式,将书作为参数输入是多余的。有一种从本质上确定这本书的方法吗?类似于我们如何使用“自我”?在some_func()方法的以下伪代码中,“如果作为Book对象的字段调用”和“ use_this_book =调用Book对象的字段”将使用什么代码

class Book(models.Model):
    authors = ManyToMany(Author, settings)

class Author(models.Model):

    fields = relationships

    def some_func(self, book):
        author = self
        if called as field from Book object:  #  replace this line
            use_this_book = calling Book object  # and this line
        else:
            use_this_book = book
        return do_something_func(author, use_this_book)

1 个答案:

答案 0 :(得分:0)

如果您有ManyToManyField定义作者和图书之间的关系,则必须将图书传递到author.some_func中。这是因为作者可能有多本书,并且您需要选择一本特定的书才能对其进行操作。

如果您将关系更改为:

class Book(models.Model):
    author = ForeignKey(Author, settings)

您仍然遇到同样的问题,因为作者仍​​然可以写多本书。如果将方法移至Book,您将可以做您想做的事情:

book.some_func()

class Book:
    def some_func(self):
        author = self.author
        # Other stuff

根据some_func的不同,这可能对您不起作用。但是,我建议您保持Book和Author之间的M2M关系,因为这种关系更加灵活并与现实世界的工作方式相匹配。即使适用于您当前的情况,最终您仍然会遇到这样的情况:一本书需要多个作者。