quadright
что ‘_set’ django переваривает только при именах без “_”
Неправда.
class MyModel_Author(models.Model):
name = models.CharField(max_length=254)
def __unicode__(self):
return self.name
class MyModel_Book(models.Model):
name = models.CharField(max_length=254)
author = models.ForeignKey('MyModel_Author')
def __unicode__(self):
return u'{}: {}'.format(self.author.name, self.name)
>>> a1 = MyModel_Author.objects.create(name='Author 1')
>>> a2 = MyModel_Author.objects.create(name='Author 2')
>>>
>>> MyModel_Book.objects.create(name='Book 1', author=a1)
>>> MyModel_Book.objects.create(name='Book 2', author=a1)
>>> MyModel_Book.objects.create(name='Book 3', author=a1)
>>> MyModel_Book.objects.create(name='Book 4', author=a2)
>>> MyModel_Book.objects.create(name='Book 5', author=a2)
>>> MyModel_Book.objects.create(name='Book 6', author=a2)
>>>
>>> a1.mymodel_book_set.all()
[<MyModel_Book: Author 1: Book 1>, <MyModel_Book: Author 1: Book 2>, <MyModel_Bo
ok: Author 1: Book 3>]
>>> a2.mymodel_book_set.all()
[<MyModel_Book: Author 2: Book 4>, <MyModel_Book: Author 2: Book 5>, <MyModel_Bo
ok: Author 2: Book 6>]
>>>
quadright
И вторая жопа, что этот “_set” выдает подобъекты в случае одного объекта (.get() .first() )
А зачем возвращать _set для всей модели?? Если уж сильно хочется, то:
Можно вернуть список PK
>>> MyModel_Author.objects.all().values_list('mymodel_book', flat=True)
[1L, 2L, 3L, 4L, 5L, 6L]
>>>
Можно выбрать по другому:
>>> MyModel_Book.objects.filter(author__in=MyModel_Author.objects.all())
[<MyModel_Book: Author 1: Book 1>, <MyModel_Book: Author 1: Book 2>, <MyModel_Book: Author 1: Book 3>, <MyModel_Book: Author 2: Book 4>, <MyModel_Book: Author 2: Book 5>, <MyModel_Book: Author 2: Book 6>]
>>>
quadright
И окончательная жопа что это все равно одной строкой нельзя сделать, выборку объекта по значению подобъекта
И опять неверно.
>>> MyModel_Author.objects.filter(mymodel_book__name__iendswith='3')
[<MyModel_Author: Author 1>]
>>>
quadright
Читал, и до этого читал, как и раньше понял что реализовано только многие-к-одному и многие-ко-многим.
А
чем отличается one-to-many от many-to-one?