如何使用另一个对象确定对象,如下所示?
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)
答案 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关系,因为这种关系更加灵活并与现实世界的工作方式相匹配。即使适用于您当前的情况,最终您仍然会遇到这样的情况:一本书需要多个作者。