*** Ошибка типа: get_value_by_attribute () отсутствует 1 обязательный позиционный аргумент: «атрибут» - PullRequest
0 голосов
/ 28 июня 2019

Я использую Django oscar и пытаюсь получить ключ и значения атрибутов продукта с помощью product.attr.get_value_by_attribute ().И я получаю выше ошибки, и я попытался передать атрибут, и он все еще дает мне ошибку.

Мой код тестирования отладчика выглядит следующим образом:

(Pdb) child_product
<Product: Good Day 100 gm>
(Pdb) child_product.__dict__
{'_state': <django.db.models.base.ModelState object at 0x7fa088e1c438>, 'id': 13, 'structure': 'child', 'upc': '', 'parent_id': 12, 'title': 'Good Day 100 gm', 'slug': 'good-day-100-gm', 'description': '', 'product_class_id': None, 'rating': None, 'date_created': datetime.datetime(2019, 6, 22, 15, 30, 24, 273252, tzinfo=<UTC>), 'date_updated': datetime.datetime(2019, 6, 22, 15, 30, 24, 273270, tzinfo=<UTC>), 'is_discountable': True, 'attr': <oscar.apps.catalogue.product_attributes.ProductAttributesContainer object at 0x7fa088e1c470>}
(Pdb) child_product.attr
<oscar.apps.catalogue.product_attributes.ProductAttributesContainer object at 0x7fa088e1c470>
(Pdb) child_product.attr.__dict__
{'product': <Product: Good Day 100 gm>, 'initialised': False}
(Pdb) child_product.attr.__dict__
{'product': <Product: Good Day 100 gm>, 'initialised': False}
(Pdb) child_product.attr.get_values()
<QuerySet [<ProductAttributeValue: Brand: Britania>, <ProductAttributeValue: Variant Name: 100 gm x 12>]>
(Pdb) child_product.attr.get_all_attributes()
<QuerySet [<ProductAttribute: Brand>, <ProductAttribute: GST Rate>, <ProductAttribute: HSN Code>, <ProductAttribute: Liquid Content>, <ProductAttribute: Parent Company>, <ProductAttribute: Promo SKU>, <ProductAttribute: Selling Lot Size>, <ProductAttribute: Sub Brand>, <ProductAttribute: Tags>, <ProductAttribute: Variant Name>, <ProductAttribute: Weight>, <ProductAttribute: Weight Unit>]>
(Pdb) child_product.attr.get_value_by_attribute()
*** TypeError: get_value_by_attribute() missing 1 required positional argument: 'attribute'
(Pdb) child_product.attr.get_value_by_attribute(attribute="Brand")
*** ValueError: invalid literal for int() with base 10: 'Brand'

Так что здесь я могуполучить значение и все атрибуты, но я не знаю, как получить значение по атрибутам, которые мне нужны.

child_product.attr.get_value_by_attribute()

Так что у кого-нибудь есть идеи по этому поводу, пожалуйста, помогите.Определенно ваша помощь будет оценена.

Ответы [ 3 ]

1 голос
/ 29 июня 2019

При получении значения по атрибутам экземпляр атрибута должен передаваться в методе get_value_by_attribute . например,

brand = child_product.attr.get_all_attributes().first()
child_product.attr.get_value_by_attribute(attribute=brand)

Вы также можете получить значения по атрибуту, используя его имя , вызывая get в результате метода get_values ​​. например

child_product.attr.get_values().get(attribute__name='Brand')
0 голосов
/ 29 июня 2019

Наконец, я нашел очень простое решение, которое выглядит следующим образом

(Pdb) child_product.attribute_summary
'Brand: Nestle, Variant Name: Rs 5 x 126'

(Pdb) child_product.attribute_summary.split(',')
['Brand: Nestle', ' Variant Name: Rs 5 x 126']

Здесь я получил имя и значение атрибута, это все, что я хочу, и я надеюсь, что это поможет вам, если вы используете Django oscar.

0 голосов
/ 28 июня 2019

Мне кажется, что объект атрибута должен быть передан как параметр для get_value_by_attribute (). Если «Бренд» - это слаг, который вы пытаетесь использовать для получения определенного атрибута, используйте get_attribute_by_slug (), чтобы получить объект атрибута, а затем передать его get_value_by_attribute ();

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