Python Django-如果字段不在数据库中,则创建对象
我只想在数据库中没有其他具有相同ID的对象时创建一个对象。如果修改了下面的参数(如状态),下面的代码将创建相同的项Python Django-如果字段不在数据库中,则创建对象,python,django,Python,Django,我只想在数据库中没有其他具有相同ID的对象时创建一个对象。如果修改了下面的参数(如状态),下面的代码将创建相同的项 returns = Return.objects.all() for ret in returns: obj, created = Return.objects.get_or_create(ItemID="UUID", ItemName="Hodaddy", State="Started") obj.save()
returns = Return.objects.all()
for ret in returns:
obj, created = Return.objects.get_or_create(ItemID="UUID",
ItemName="Hodaddy", State="Started")
obj.save()
如果您知道该id,可以查询: 在你的问题中,你有:
returns = Return.objects.all()
for ret in returns:
return_in_database = Return.objects.filter(ItemId="UUID").exists()
if not return_in_database:
obj, created = Return.objects.get_or_create(ItemID="UUID",
ItemName="Hodaddy", State="Started")
obj.save()
这可以通过以下方式实现:
if not Return.objects.filter(ItemId="UUID").exists():
obj, created = Return.objects.get_or_create(ItemID="UUID",
ItemName="Hodaddy", State="Started")
obj.save()
如您所见,我已经删除了for循环,因为您没有在任何地方使用变量ret
,所以不需要迭代所有返回对象。上述功能等同于您所拥有的功能。:)
或:
您可以在models.py中使用create_或_update方法编写自己的管理器
class ReturnManager(models.Manager):
def create_or_update(self, **kwargs):
new_return = Return(**kwargs)
existing = Return.objects.filter(ItemId=new_returns.ItemID).first()
if existing:
new_return.pk = existing.pk
new_return.id = existing.id
new_return.save()
return new_return
然后将其分配给退货模型
class Return(model.Models):
# your object fields here
objects = ReturnManager()
如果您知道该id,可以查询: 在你的问题中,你有:
returns = Return.objects.all()
for ret in returns:
return_in_database = Return.objects.filter(ItemId="UUID").exists()
if not return_in_database:
obj, created = Return.objects.get_or_create(ItemID="UUID",
ItemName="Hodaddy", State="Started")
obj.save()
这可以通过以下方式实现:
if not Return.objects.filter(ItemId="UUID").exists():
obj, created = Return.objects.get_or_create(ItemID="UUID",
ItemName="Hodaddy", State="Started")
obj.save()
如您所见,我已经删除了for循环,因为您没有在任何地方使用变量ret
,所以不需要迭代所有返回对象。上述功能等同于您所拥有的功能。:)
或:
您可以在models.py中使用create_或_update方法编写自己的管理器
class ReturnManager(models.Manager):
def create_or_update(self, **kwargs):
new_return = Return(**kwargs)
existing = Return.objects.filter(ItemId=new_returns.ItemID).first()
if existing:
new_return.pk = existing.pk
new_return.id = existing.id
new_return.save()
return new_return
然后将其分配给退货模型
class Return(model.Models):
# your object fields here
objects = ReturnManager()
您需要更改查询中的参数,以便仅在
ItemID
上约束对象查找。返回新对象后,您可以更新ItemName
和状态
obj, created = Return.objects.get_or_create(ItemID="UUID")
if created:
obj.ItemName="<item-name>"
obj.State="<Started>"
obj.save()
obj,created=Return.objects.get\u或\u create(ItemID=“UUID”)
如果创建:
obj.ItemName=“”
obj.State=“”
obj.save()
您需要更改查询中的参数,以便仅在ItemID
上约束对象查找。返回新对象后,您可以更新ItemName
和状态
obj, created = Return.objects.get_or_create(ItemID="UUID")
if created:
obj.ItemName="<item-name>"
obj.State="<Started>"
obj.save()
obj,created=Return.objects.get\u或\u create(ItemID=“UUID”)
如果创建:
obj.ItemName=“”
obj.State=“”
obj.save()
get\u或\u create
使用所有提供的参数来查找对象
相反,您需要做的是使用special为您不想筛选的字段提供新值
在您的例子中,您只希望UUID字段是唯一的,因此您提供其他两个成员作为默认值
obj, created = Return.objects.get_or_create(ItemID="UUID",
defaults={ItemName:"Hodaddy", State:"Started"})
然后,您可以根据创建的
的值做出进一步的决定。我不确定您为什么要重复原始问题中的所有返回?get\u或\u create
使用所有提供的参数来查找对象
相反,您需要做的是使用special为您不想筛选的字段提供新值
在您的例子中,您只希望UUID字段是唯一的,因此您提供其他两个成员作为默认值
obj, created = Return.objects.get_or_create(ItemID="UUID",
defaults={ItemName:"Hodaddy", State:"Started"})
然后,您可以根据创建的的值做出进一步的决定。我不知道你为什么要重复原始问题中的所有返回?嗨,尼利克,谢谢你的两个答案。我建议对第一个答案做一些修改,并将其标记为正确。好的,你希望我做什么修改?嗨,尼利克,谢谢你的两个答案。我建议对第一个答案进行一些修改,并将其标记为正确。好的,您希望我做哪些修改?