Форум сайта python.su
1
Доброго времени суток, не смог найти варианты один-ко-многим, задавал ранее подобный вопрос, но меня вывели на оптимизацию варианта многие-ко-многим.
Понимаю как сделать многие-ко-многим, многие-к-одному, но один-ко-многим получается не реализован в ORM?
object(models.Model): name = models.CharField() subobject(models.Model): name = models.CharField() object = models.ForeignKey(object)
Отредактировано quadright (Июль 29, 2014 12:04:21)
Офлайн
568
А чем отличается многие-к-одному от один-ко-многим?
Офлайн
34
object.subobject_set.all()
Офлайн
1
FishHookМногие-к-одному - могу получить объект через подобъект
А чем отличается многие-к-одному от один-ко-многим?
object_name = db.subobject.objects.get(id=1).object.name
Офлайн
1
GreyZmeem
subobjects = object.subobject_set.all()
Офлайн
568
FishHook
А чем отличается многие-к-одному от один-ко-многим?
quadright
Многие-к-одному - могу получить объект через подобъект
Офлайн
1
FishHookЗнал бы, не спрашивал
И как это должно выглядеть в структуре таблиц и связей реляционной базы данных?

Отредактировано quadright (Июль 30, 2014 06:37:24)
Офлайн
34
>>> m = Manufacturers.objects.all().first() >>> m <Manufacturers: Skoda> >>> m.carmodels_set.all() [<CarModels: Skoda -> Octavia>, <CarModels: Skoda -> Fabia>, <CarModels: Skoda -> Fabia Combi>, ...] >>>
Отредактировано GreyZmeem (Июль 30, 2014 08:48:06)
Офлайн
1
subobjects = object.subobject_set.all()
ORM Django удобен, но не на все 100.GreyZmeemЧитал, и до этого читал, как и раньше понял что реализовано только многие-к-одному и многие-ко-многим. А один-ко-многим от многие-многим отличается отсутствием связующей таблицы, достаточно лишь ForeignKey у подобъектов сделать. Буду значит многие-ко-многим использовать.
quadright, почитайте про related objects
Офлайн
34
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 для всей модели?? Если уж сильно хочется, то:
И вторая жопа, что этот “_set” выдает подобъекты в случае одного объекта (.get() .first() )
>>> 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?
Читал, и до этого читал, как и раньше понял что реализовано только многие-к-одному и многие-ко-многим.
Офлайн