Переопределение переменных-членов класса в Python (Django/Satchmo)

Я использую Satchmo и Django и пытаюсь расширить модель продукта Satchmo. Я хотел бы, чтобы одно из полей в модели продукта Satchmo имело значение по умолчанию в админке без изменения исходного кода Satchmo. Вот сокращенная версия модели продукта Satchmo:

class Product(models.Model):
    site = models.ForeignKey(Site, verbose_name='Site')

Это то, что я пытался сделать, чтобы расширить его...

class MyProduct(Product):
    Product.site = models.ForeignKey(Site, verbose_name='Site', editable=False, default=1)

Это не работает, есть идеи, почему?


person Udbhav    schedule 17.04.2009    source источник


Ответы (3)


По двум причинам: во-первых, способ, которым вы пытаетесь переопределить переменную класса, не работает в Python. Вы просто определяете его в классе как обычно, так же, как def __init__(self): переопределяет инициализатор суперкласса. Но наследование модели Django просто не поддерживает это. Если вы хотите добавить ограничения, вы можете сделать это в методе save().

person Community    schedule 17.04.2009

Вы могли бы, вероятно, исправить это, если бы вы действительно хотели:

site_field = Product._meta.get_field('site')
site_field.editable = False
site_field.default = 1

Но это неприятная привычка и может вызвать проблемы; возможно, менее ремонтопригодный, чем просто прямое исправление исходного кода Satchmo.

person Carl Meyer    schedule 20.04.2009

Вы не можете изменить суперкласс из подкласса.

У вас есть источник. Используйте подрывную деятельность. Внесите изменения. Когда Satchmo обновится, объедините обновления вокруг вашего изменения.

person S.Lott    schedule 17.04.2009