ForeignKey django 1.1.1模型

时间:2010-03-31 14:02:01

标签: django django-models

我有

class staff_name(models.Model):

    firstname = models.CharField(max_length=150)
    surname = models.CharField(max_length=150)



class inventory_transaction(models.Model):

    staffs = models.ForeignKey(staff_name)

我想通过inventory_transaction

获取或创建员工姓氏和名字

我使用下面的代码

inventory_transaction.objects.get_or_create(staffs__surname__contains=sname,staffs__firstname__contains=fname) 

我收到此错误"staffs__surname__contains can not be defined"

我做错了什么?

谢谢

1 个答案:

答案 0 :(得分:2)

嗯基于get_or_create()的文档:

  

在英语中,这意味着从任何非“默认”关键字参数开始,不包含双下划线(表示不完全查找)

我想说你想做什么是不可能的,因为你的查询可以返回多个结果。传递给get_or_create()的参数必须以返回唯一结果的方式。

您可以尝试使用__exact代替__contains

inventory_transaction.objects.get_or_create(staffs__surname__exact=sname,staffs__firstname__exact=fname) 

但我不认为get_or_create()可以自动创建外键对象。

在这种情况下,最简单的可能是:

try:
    itrans = inventory_transaction.objects.get(staffs__surname__contains=sname,staffs__firstname__contains=fname)
except inventory_transaction.DoesNotExist:
    staff = staff_name(firstname=fname, surname=sname)
    staff.save()
    itrans = inventory_transaction(staffs=staff)
    itrans.save()

顺便说一下,通常的做法是为类使用大写名称,我不会使用下划线,因为它们也用于数据库查找。也就是说,将您的课程重命名为StaffNameInventoryTransaction