相当于 Python 中的 .presence

Equivalent of .presence in Python

所以,我在 Rails 上使用 Ruby 有一段时间了,我想知道 Python/Django 中是否有类似 .presence 的东西。

Presence returns 接收器,如果它存在,否则 returns nil.

object.presence 等同于:

object.present? ? object : nil

例如:

state   = params[:state]   if params[:state].present?
country = params[:country] if params[:country].present?
region  = state || country || 'US'
becomes

region = params[:state].presence || params[:country].presence || 'US'

安东尼

在 Python 中,您可以通过执行以下操作来实现此目的,假设 paramsdict

state = params.get('state')
country = params.get('country')
region = 'US' if (state and country) else None

方法dict.get(key) 将return 与已传递的键关联的值。如果不存在这样的键,它 returns None.

如果您需要用实际的空字符串替换空值,您可以这样做:

state = params.get('state', '')
country = params.get('country', '')
region = 'US' if (state and country) else ''

总的来说,"Pythonic" 这样做的方法是使用表单:

class Address(Model):
    state = ...
    country = ...
    region = ...

AddressForm = modelform_factory(Address)

#inside view
def view(request):
    if request.method == 'POST':
        form = AddressForm(request.POST, request.FILES)

        if form.is_valid():
            address = form.save(commit=False)
            address.region = 'US' if address.state and address.country
            address.save()

通过创建自定义 AddressForm class,您可以在保存实例之前自动执行此处理。这就是Formclasses.

的确切作用