/ / django - Unterklassen eines Modells, um neue Methoden hinzuzufügen - Python, Django

django - Unterklasse eines Modells, nur um neue Methoden hinzuzufügen - python, django

Ich muss ein Modell von einer Drittanbieter-App (django-oscar).

Wenn ich das tue

from oscar.apps.catalogue.models import Category

class NewCategory(Category):
@property
def product_count(self):
return self.product_set.all().count()

class Meta:
db_table = "catalogue_category"

Django wird denken, dass es sich um eine Multi-Table-Vererbung handelt NewCategory ist ein Kindermodell für Category. Dies führt zu Fehlern wie

OperationalError at /api/categories/
no such column: catalogue_category.category_ptr_id

Ich kann damit davonkommen

def product_count(self):
return self.product_set.all().count()

Category.product_count = product_count

aber das scheint nicht nett zu sein, und ich kann keine hinzufügen @property Dekorateur auf diese Weise.

Gibt es einen saubereren Weg, dies zu tun?

Antworten:

1 für die Antwort № 1

Du brauchst ein Proxy-Modell.

class NewCategory(Category):
class Meta:
proxy = True

...