проверить связанный объект или нет - PullRequest
0 голосов
/ 20 сентября 2018

Мне нужно проверить, связан ли мой объект или нет 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):

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Насколько я знаю, у вас есть объект ItemVariationValue, и вы хотите знать, есть ли у этого объекта ItemVariation.так что вы можете легко сделать

#your code
itemvariation=ItemVariation.objects.get(item_code=sku)

check_relation_obj=itemvariation.item_variation

также, если вы думаете, что можете иметь или не иметь отношение к ItemVariation, добавьте пустое = True, null = True с внешним ключом.

0 голосов
/ 20 сентября 2018

Примечание (ForeignKey номенклатура): ForeignKey s должен не иметь суффикс _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)

Byиспользуя itemvariation_id здесь, мы избегаем загрузки связанного объекта и, следовательно, потенциально дополнительного запроса к базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...