Django模型对象存在()返回""而不是"无"

时间:2017-06-29 12:06:28

标签: django django-models exists

因此,对于基本交付表单,我有一个名为" customer"其中客户以名字,姓氏和前缀指定。

现在下拉列表显示:

客户:

  • Yvonne,Groot,de
  • Kaleigh,Water,van der
  • Tim,Klein,
  • Cees,Swart,

我想做的是检查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'没有定义,检查'前缀'的正确方法是什么?价值存在?

2 个答案:

答案 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__

希望有所帮助。