小编dnf*_*ren的帖子

使用Flask-WTForms字段描述呈现html标题属性

我正在使用Flask-WFT文档页面 上显示的render_field宏来跨不同模板呈现长格式的字段.

字段定义如下

year_built = IntegerField(label='Year Built', 
             description='Year built, not the year of a major renovation.',
             validators=[validators.NumberRange(
                                    min=1700,  
                                    max=2012, 
                                    message="Between %(min)s and %(max)s")])
Run Code Online (Sandbox Code Playgroud)

宏看起来像这样......

{% macro render_field(field) %}
  <dt>{{ field.label }}
  <dd>{{ field(**kwargs)|safe }}
  {% if field.errors %}
    <ul class=errors>
    {% for error in field.errors %}
      <li>{{ error }}</li>
    {% endfor %}
    </ul>
  {% endif %}
  </dd>
{% endmacro %}
Run Code Online (Sandbox Code Playgroud)

在表单本身中,各个字段使用...

{{ render_field(form.year_built, class="input text")}}
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚的是一种在创建HTML字段的宏部分内的字段对象中使用描述的方法field(**kwargs).我知道我可以将关键字传递给render_field函数,但我正在处理包含100多个字段的表单,并在forms.py中设置描述,然后再次将其设置为template.html中的title关键字,这似乎是不必要的补充.我真的想使用宏来显示描述作为标题,如果它在那里或只显示没有标题的字段,如果不是.

有没有办法kwargs在field()函数运行之前添加新条目?

python flask wtforms

6
推荐指数
1
解决办法
4403
查看次数

SQLAlchemy hybrid_property 和表达式

我正在使用 sqlalchemy 将外部进程生成的一些数据存储在 postgres 数据库中。外部数据有几个存储为字符串的日期,我希望将这些日期用作日期时间对象进行比较和持续时间计算,并且我希望在数据模型中进行转换以保持一致性。我正在尝试使用 hybrid_property 但我遇到了基于 SQLAlchemy 使用 hybrid_property 作为实例或类的不同方式的问题。

一个(简化的)案例看起来像这样......

class Contact(Base):
    id = Column(String(100), primary_key=True)
    status_date = Column(String(100))

    @hybrid_property
    def real_status_date(self):
        return convert_from_outside_date(self.status_date)
Run Code Online (Sandbox Code Playgroud)

使用类似这样的转换函数(该函数可以返回一个日期,转换失败时返回 False 或传递 None 时返回 None)...

def convert_from_outside_date(in_str):
    out_date = None

    if in_str != None:
        try:
            out_date = datetime.datetime.strptime(in_str,"%Y-%m-%d")
        except ValueError:
            out_date = False
    return out_date
Run Code Online (Sandbox Code Playgroud)

当我使用 Contact 实例时,contact.real_status_date 作为日期时间正常工作。问题是在查询过滤器中使用 Contact.real_status_date 时。

db_session.query(Contact).filter(
    Contact.real_status_date > datetime.datetime.now())
Run Code Online (Sandbox Code Playgroud)

给我一个“TypeError:此子句的布尔值未定义”异常,带有

in_str != None
Run Code Online (Sandbox Code Playgroud)

转换函数的行作为堆栈跟踪的最后一部分。

一些答案 ( /sf/answers/1015328681/ ) 显示了 setter 函数的使用和数据模型中新列的添加。其他答案 ( /sf/answers/954989591/ ) 显示添加了 @property.expression 函数,该函数返回 …

python sqlalchemy

5
推荐指数
1
解决办法
5502
查看次数

标签 统计

python ×2

flask ×1

sqlalchemy ×1

wtforms ×1