Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Один-ко-многим вообще есть такое в Django? [RSS Feed]

#1 Июль 31, 2014 07:25:10

quadright
Зарегистрирован: 2013-07-26
Сообщения: 75
Репутация: +  1  -
Профиль   Отправить e-mail  

Один-ко-многим вообще есть такое в Django?

Да… “_” никак не влияет, вчера где-то накосячил, в моей таблице были имена с “_” и не работало, создал тестовую без них и заработало. В моей таблице много всего, сейчас еще раз сделал и нормально всё завелось.

Теперь увидел что нормально всё работает, не понимал до этого.

>>> MyModel_Author.objects.filter(mymodel_book__name__iendswith='3')
[<MyModel_Author: Author 1>]
>>>
Благодарю!
Думал что при связи через ForeignKey связь в одну сторону устанавливается, только со стороны где этот самый ForeignKey есть.

Офлайн

#2 Июль 31, 2014 07:58:43

quadright
Зарегистрирован: 2013-07-26
Сообщения: 75
Репутация: +  1  -
Профиль   Отправить e-mail  

Один-ко-многим вообще есть такое в Django?

Еще такой вопросик, у меня в модели (many-to-many) был метод (get_contract), который возвращал данные из подобъекта. Что-то типа такого:

class MyModel_Author(models.Model):
    name = models.CharField(max_length=254)
    book = models.ManyToManyField(mymodel_author_mymodel_book)
    def __unicode__(self):
        return self.name
    def get_contract(self):
        contract = self.book.first().contract_number
        return contract
class MyModel_Book(models.Model):
    name = models.CharField(max_length=254)
    contract_type = models.CharField(max_length=254)
    author = models.ForeignKey('MyModel_Author')
    def __unicode__(self):
        return u'{}: {}'.format(self.author.name, self.name)
А как при один-ко-многим такое в модели реализовать?
Пробывал
contract = self.mymodel_book.first().contract_number
И получил ‘object has no attribute’

Отредактировано quadright (Июль 31, 2014 08:08:21)

Офлайн

#3 Июль 31, 2014 10:09:38

GreyZmeem
От: Киев
Зарегистрирован: 2013-12-03
Сообщения: 147
Репутация: +  34  -
Профиль   Отправить e-mail  

Один-ко-многим вообще есть такое в Django?

Если вы хотите получить объекты которые ссылаются НА вас, то нужно использовать _set, имя поля - это имя модели в lower case
Т.е.:

def get_contract(self):
 return self.mymodel_book_set.first().contract_type
Также вы пытаетесь обратиться к contract_number, а в MyModel_Book у вас contract_type
Все же перечитайте внимательно ссылку которую я вам давал по releted objects - там все это описано

Офлайн

#4 Авг. 1, 2014 03:57:42

quadright
Зарегистрирован: 2013-07-26
Сообщения: 75
Репутация: +  1  -
Профиль   Отправить e-mail  

Один-ко-многим вообще есть такое в Django?

contract_number и contract_type - это прям на форуме код писал, в моей таблице другие имена. Затык был в _set, с _set'ом всё заработало, ага

Благодарю еще раз

Отредактировано quadright (Авг. 1, 2014 03:58:58)

Офлайн

  • Начало
  • » Django
  • » Один-ко-многим вообще есть такое в Django?[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version