@MAGistr_MTM
Учусь программировать

Как добавить одно поле для продукта в админке?

Доброго времени суток.

Я разрабатываю магазин на Django-Oscar и мне нужно что бы для каждого продукта вводить уровень налога на него.
Я сначала добавил поле tax_rate в самом продукте:
from django.utils.translation import ugettext_lazy as _
from django.db import models
from oscar.apps.partner.abstract_models import AbstractStockRecord
from django.core.validators import MinValueValidator

class StockRecord(AbstractStockRecord):

    tax_rate = models.DecimalField(
    	_("Tax rate"), decimal_places=2, max_digits=12,
    	blank=True, null=True, validators=[MinValueValidator(0)])

from oscar.apps.partner.models import *

Теперь нужно добавить это поле в админке. Этого можно достичь, если в ядре Oscar немного подправить apps/dashboard/catalogue/forms.py:

class StockRecordForm(forms.ModelForm):

    def __init__(self, product_class, user, *args, **kwargs):
        # The user kwarg is not used by stock StockRecordForm. We pass it
        # anyway in case one wishes to customise the partner queryset
        self.user = user
        super(StockRecordForm, self).__init__(*args, **kwargs)

        # If not tracking stock, we hide the fields
        if not product_class.track_stock:
            del self.fields['num_in_stock']
            del self.fields['low_stock_threshold']
        else:
            self.fields['price_excl_tax'].required = True
            self.fields['num_in_stock'].required = True
            self.fields['tax_rate'].required = True # добавил

    class Meta:
        model = StockRecord
        fields = ['partner', 'partner_sku', 'price_currency', 'price_excl_tax', 'tax_rate', # добавил
                  'price_retail', 'cost_price',  'num_in_stock', 'low_stock_threshold',]

Все прекрасно работает. Но это не хорошо изменять исходники.
Тогда я форкнул приложениеapps.dashboard.catalogue, потом в нем(локальном) создал файл forms.py, в которым добавил class StockRecordForm(forms.ModelForm)(уже подправленый), но всеравно не работает.

Кто-то может помочь мне? Буду очень благодарен за помощь.

П.С. извините за мой плохой русский.
  • Вопрос задан
  • 451 просмотр
Решения вопроса 1
winordie
@winordie
Лучшая документация -- исходники
Тогда я форкнул приложение

Точно форкнул? В настройках добавил?
from oscar import get_core_apps
INSTALLED_APPS += get_core_apps([
    'path.to.local.folder.dashboard.catalogue',
])
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы