if语句引用外键

时间:2015-09-09 16:25:51

标签: python django

我有django应用程序,技术人员输入服务数据,如果客户不在列表中,他们选择" NEW"在customer字段下拉列表中,在service.new_customer字段中输入新客户的名称,而不是添加客户。当我展示它时,我想要展示" John' Pub"如果它是现有客户,并且"新:John's Pub"如果不是。我可以通过使用id来获得这个功能 - 客户的ID称为" NEW"是1038.但是,我希望能够在逻辑上引用“" NEW"而不是id。

这是我的models.py

class Service(models.Model):
    customer = models.ForeignKey(Customer)
    new_customer = models.CharField(max_length=100, blank=True, null=True)

class Customer(models.Model):
    name = models.CharField(max_length=200)

view.py有效:

def service_view(request):
    for service in services:
        if service.customer_id == 1038:
            service.customer_combo="%s:%s"%(service.customer,service.new_customer)
        else:
            service.customer_combo="%s"%(service.customer)
return render(request,'template.html')

view.py不起作用*:

def service_view(request):
    for service in services:
        if service.customer == 'NEW':
            service.customer_combo="%s:%s"%(service.customer,service.new_customer)
        else:
            service.customer_combo="%s"%(service.customer)
return render(request,'template.html')
  • 当我说它不起作用时,我的意思是它只会在" else"中分配customer.combo。条件,虽然有很多情况下客户是新的 - 它的印刷"新"而不是"新:John' Pub"

我应该如何构建' if service.customer ==' NEW':'让它发挥作用的声明?

3 个答案:

答案 0 :(得分:0)

if service.customer.name == 'NEW':

答案 1 :(得分:0)

您正在尝试将Customer对象与客户的name进行比较。它们属于不同类型,无法进行比较。

您需要执行以下操作:

service.customer == some_customer_object # compare with model object

service.customer.name == 'NEW' # compare with the name

str(service.customer) == 'NEW' # compare with the representation of the object

答案 2 :(得分:0)

这也有效,但我认为彼得的答案更好,看起来更干净

if str(service.customer) == 'NEW':