Как определить конкретный объект, используя другой объект класса в качестве ManyToMany в модели Django? - PullRequest
0 голосов
/ 15 марта 2019

Как я могу определить объект, используя другой объект, как показано ниже?

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 голосов
/ 15 марта 2019

Если у вас есть 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 делает, это может или не может работать для вас.Однако я бы посоветовал вам сохранить отношения M2M между Книгой и Автором, так как они более гибкие и соответствуют принципам работы реального мира.Даже если это работает для вас в текущих делах, в конечном итоге вы столкнетесь с ситуацией, когда вам нужно несколько авторов для одной книги.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...