Django:如果一个对象需要被创建或者可以被捕获,这是一个简单的处理方法



我在我的网站上有一个只有电子邮件的输入栏,客户可以在这里注册时事通讯。

此刻,我正在处理一个函数,如果这个客户(电子邮件)已经存在,如果不存在,则创建对象,如果不存在,则捕获对象。

必须有一个更简单的方法在Django中做到这一点?什么好主意吗?谢谢你。

这是简化后的函数:
def get_customer(email):
# all only lowercase in order to avoid multiple entries
email = email.lower()
if Customer.objects.filter(email=email).exists():
# get customer object
customer = Customer.objects.get(email=email)
else:
# save form input to database
customer = Customer.create(email)
customer.save()
return customer

这是真正的函数,其中我还更新了可选参数,如name(这是另一种形式的输入):

def get_customer(name, email):
# all only lowercase in order to avoid multiple entries
email = email.lower()
if Customer.objects.filter(email=email).exists():
# get customer object
customer = Customer.objects.get(email=email)
# if no name available in customer object but name given here, then update customer object
if len(customer.name) == 0 and len(name) > 0:
Customer.objects.filter(id=customer.id).update(name=name)
else:
# save form input to database
customer = Customer.create(name, email)
customer.save()
return customer

注::我知道email = email.lower()不是100%正确的,因为@Gmail.com和@Gmail.com不一样…

据我所知,get_or_create在第二种情况下也有帮助:

def get_customer(name, email):
def customer_updated_name():
return len(customer.name) == 0 and len(name) > 0
email = email.lower()
customer, created = Customer.objects.get_or_create(email=email)
if created or customer_updated_name:
customer.name = name
customer.save()
return customer

最新更新