我需要检查与我的对象相关的ORM postgresql /
我需要检查两个对象ItemVariationValue和ItemVariation ItemVariationValue 与 ItemVariation
相关models.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):
答案 0 :(得分:1)
注意(
ForeignKey
命名法):ForeignKey
应该 后缀为_id
,因为Django会自动构造一个包含主键的额外字段fieldname_id
。通过编写一个_id
后缀,您将引入诸如item_variation_id_id
之类的额外属性。尽管严格来说这不是问题,但它引起了很多混乱。例如my_itemvariationvalue.itemvariation_id
将产生一个ItemVariation
对象,等等。
如果您固定了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
,我们避免加载相关对象,因此有可能进行额外的数据库查询。
答案 1 :(得分:0)
据我所知,您有一个ItemVariationValue对象,并且您想知道此对象是否具有ItemVariation。这样您就可以轻松完成
#your code
itemvariation=ItemVariation.objects.get(item_code=sku)
check_relation_obj=itemvariation.item_variation
如果您认为自己可能与ItemVariation有关系, 添加带有外键的blank = True,null = True。