我有
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"
我做错了什么?
谢谢
答案 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()
顺便说一下,通常的做法是为类使用大写名称,我不会使用下划线,因为它们也用于数据库查找。也就是说,将您的课程重命名为StaffName
和InventoryTransaction