因此,对于基本交付表单,我有一个名为" customer"其中客户以名字,姓氏和前缀指定。
现在下拉列表显示:
客户:
我想做的是检查Customer.prefix是否存在并显示""而不是值"无"。
#models.py
class Customer(models.Model):
"""
Model representing the customer
"""
first_name = models.CharField(max_length=200)
prefix = models.CharField(max_length=4, null=True, blank=True)
last_name = models.CharField(max_length=200)
def __str__ (self):
"""
String for representing the Model object.
"""
if Customer.objects.filter(prefix='').exists():
# Display first name, last name and prefix
return '%s, %s, %s' % (self.last_name, self.first_name, self.prefix)
else:
# Display first name and lastname
return '%s, %s' % (self.last_name, self.first_name)
这将返回错误:name' prefix'没有定义,检查'前缀'的正确方法是什么?价值存在?
答案 0 :(得分:4)
尝试将方法更改为:
def __str__ (self):
"""
String for representing the Model object.
"""
if self.prefix:
# Display first name, last name and prefix
return '%s, %s, %s' % (self.last_name, self.first_name, self.prefix)
else:
# Display first name and lastname
return '%s, %s' % (self.last_name, self.first_name)
在您的代码版本中,您永远不会访问else语句,因为DB中有一些带有空前缀的记录,if Customer.objects.filter(prefix='').exists()
始终为真。
答案 1 :(得分:0)
使用Customer.objects.filter(prefix__isnull=True).exists()
代替Customer.objects.filter(prefix='').exists()
。
或
class Customer(models.Model):
"""
Model representing the customer
"""
first_name = models.CharField(max_length=200)
prefix = models.CharField(max_length=4, null=True, blank=True)
last_name = models.CharField(max_length=200)
def __str__ (self):
"""
String for representing the Model object.
"""
data = [self.last_name, self.first_name, self.prefix]
return ', '.join([field for field in data if field])
这样,它只返回那些非None的字段。因此,即使缺少名字或姓氏,您仍然会获得有效的__str__
。
希望有所帮助。