我需要检查我的对象是否相关ORM postgresql/
我有两个对象 ItemVariationValue 和 ItemVariation 我需要检查 ItemVariationValue 与ItemVariation
有关系模型.py
class ItemVariation(models.Model):
item=models.ForeignKey(Item,on_delete=models.CASCADE)
price=models.IntegerField(blank=True,null=True,default=0)
item_code=models.CharField(max_length=500)
keywords= models.ManyToManyField(Keyword)
image=models.ImageField(upload_to='dishes/', blank=True, null=True)
def __str__(self):
return str(self.id)
class ItemVariationValue(models.Model):
item=models.ForeignKey(Item,on_delete=models.CASCADE)
item_variation=models.ForeignKey(ItemVariation,on_delete=models.CASCADE)
attribute=models.ForeignKey(Attribute,on_delete=models.CASCADE)
attribute_value=models.ForeignKey(AttributeValue,on_delete=models.CASCADE)
def __str__(self):
return str(self.id)
views.py
def get_items(request): # request= {"order_details": "varxxx:1"}
order=request.data['order_details']
items = order.split(',')
total = 0
for item in items:
od = item.split(':')
sku = str(od[0])
qty = int(od[1])
itemvariation=ItemVariation.objects.get(item_code=sku)
# if ItemVariationValue.item_variation has ForeignKey(ItemVariation):
最佳答案
Note (
ForeignKey
nomenclature):ForeignKey
s should not have an_id
suffix, since Django will automatically construct an extra fieldfieldname_id
that contains the primary key. By writing an_id
suffix, you will introduce extra attributes likeitem_variation_id_id
. Although strictly speaking that is not a problem, it introduces a lot of confusion. For examplemy_itemvariationvalue.itemvariation_id
will result in anItemVariation
object, etc.
如果您修复了 ForeignKey
名称,您可以这样检查:
# given the ForeignKey is named itemvariation, not itemvariation_id and use Comparison Operators
if my_itemvariationvalue.itemvariation_id == my_itemvariation.id:
# ... (objects are related)
else:
# ... (otherwise)
通过在此处使用 itemvariation_id
,我们避免加载相关对象,从而避免潜在的额外数据库查询。
关于python - 是否检查相关对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52423510/