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

Я использую 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)

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

Ответы [ 3 ]

1 голос
/ 20 апреля 2009

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

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

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

1 голос
/ 18 апреля 2009

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

0 голосов
/ 18 апреля 2009

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

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

...