#python #flask #sqlalchemy
#python #flask #sqlalchemy
Вопрос:
Обновить
Я не смог понять, почему я получал неправильный результат
но я попробовал кое-что по наитию, и это сработало. Хотя я не понимаю, почему.
Я добавил новый метод класса, изменив следующее
От:
def is_added(self, topic)
Для:
def isAdded(self,topic)
Остальная часть кода осталась прежней.
Это результаты, которые я вижу в оболочке сейчас.
>>> h = Highlight(text="highlight2")
>>> t = Topic(title="topic2")
>>> db.session.add(h)
>>> db.session.add(t)
>>> h.topics.all()
[]
>>> h.AddToTopic(t)
>>> h.topics.all()
[<Topic 2>]
>>> h.is_added(t)
False
>>> h.isAdded(t)
True
>>>
Я предполагаю, что это как-то связано с тем, что подчеркивание является особенным в python?
но, кажется, я могу двигаться дальше.
Оригинальное сообщение
У меня есть следующие методы в модели под названием Highlight:
# add highlight to topic
def AddToTopic(self, topic):
if not self.is_added(topic):
self.topics.append(topic)
# checks if a highlight is in a topic
def is_added(self, topic):
return self.topics.filter(
topic.id == highlights_topics.c.topic_id).count() > 0
Когда я загружаю контекст оболочки со следующим сценарием:
>>> h = Highlight(text="highlight1")
>>> t = Topic(title="Topic 1")
>>> db.session.add_all([h,t])
>>> h.AddToTopic(t)
>>> h.topics.all()
Результат: [<Topic 1>]
проверяя метод >>> h.is_added(t)
, я получаю False
но затем я пробую следующее:
>>> x = h.topics.filter(t.id==highlights_topics.c.topic_id).count() > 0
>>> x
True
В контексте оболочки я просто вручную создаю ту же функцию.
почему я вижу другой результат?
Кроме того, если я воссоздам функцию в контексте оболочки, она сработает.
>>> def is_added(highlight, topic):
... return highlight.topics.filter(topic.id == highlights_topics.c.topic_id).count() > 0
...
>>> is_added(h, t)
True
>>>
Ответ №1:
Попробуйте это:
В вашем методе класса вместо self.topics.filter
используйте Highlights.topics.filter
. Используйте имя класса вместо экземпляра self
.
Комментарии:
1. Все еще получаю false с is_added