Django模型对象存在()返回“&引用;而不是",;无”;

Django模型对象存在()返回“&引用;而不是",;无”;,django,django-models,exists,Django,Django Models,Exists,因此,对于一个基本的交付表单,我有一个名为“customer”的下拉列表,其中customer是以名字、姓氏和前缀指定的 目前,下拉列表显示: 客户: 伊冯,格罗特,德 卡利,水,范德 蒂姆,克莱恩,无 Cees,Swart,无 我要做的是检查is Customer.prefix是否存在,并显示一个“”而不是值“None” 相反,这将返回一个错误:未定义名称“prefix”,检查“prefix”值是否存在的正确方法是什么 尝试将此方法更改为: def __str__ (self):

因此,对于一个基本的交付表单,我有一个名为“customer”的下拉列表,其中customer是以名字、姓氏和前缀指定的

目前,下拉列表显示:

客户:

  • 伊冯,格罗特,德
  • 卡利,水,范德
  • 蒂姆,克莱恩,
  • Cees,Swart,
我要做的是检查is Customer.prefix是否存在,并显示一个“”而不是值“None”


相反,这将返回一个错误:未定义名称“prefix”,检查“prefix”值是否存在的正确方法是什么

尝试将此方法更改为:

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语句,因为数据库中有一些记录的前缀为空,如果Customer.objects.filter(前缀=“”).exists()始终为真。

尝试将此方法更改为:

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语句,因为数据库中有些记录前缀为空,如果Customer.objects.filter(前缀=“”).exists()始终为真。

使用
Customer.objects.filter(前缀为NULL=真)。exists()
而不是
Customer.objects.filter(前缀=“”).exists()

这样,它将只返回那些不是“无”的字段。因此,即使缺少firstname或lastname,您仍然会得到一个有效的
\uuu str\uuu


希望对您有所帮助。

使用
Customer.objects.filter(prefix\uu isnull=True).exists()
而不是
Customer.objects.filter(prefix='').exists()

这样,它将只返回那些不是“无”的字段。因此,即使缺少firstname或lastname,您仍然会得到一个有效的
\uuu str\uuu


希望这有帮助。

谢谢您的快速回复!所以它实际上做的是检查对象是否为空?@KevinD。不客气
Customer.objects.filter(前缀=“”).exists()
这是检查数据库中是否有前缀为空的对象。我相信你有一些。所以这永远是真的<代码>自我。前缀在另一边检查当前对象前缀是否为空。太棒了,正是我要找的@凯文德。很高兴能帮上忙)谢谢你的快速回复!所以它实际上做的是检查对象是否为空?@KevinD。不客气
Customer.objects.filter(前缀=“”).exists()
这是检查数据库中是否有前缀为空的对象。我相信你有一些。所以这永远是真的<代码>自我。前缀在另一边检查当前对象前缀是否为空。太棒了,正是我要找的@凯文德。很高兴提供帮助)注意,通常不建议对字符域使用
null=True
。这意味着您有两个空值,
'
。这可能会导致错误。例如,在您的问题中,您检查
'
,但不检查
None
。请注意,通常不建议对字符字段使用
null=True
。这意味着您有两个空值,
'
。这可能会导致错误。例如,在您的问题中,您检查
'
,但不检查
None
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])