метод класса алхимии flask sql не работает, но работает в оболочке

#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