графеновые узлы для наследования модели от абстрактного суперкласса - PullRequest
0 голосов
/ 16 мая 2019

У меня есть схема 2 классов:

class Anomaly(DjangoObjectType):
    class Meta:
        model = models.Anomaly


class Batch(LoggedModel):
    class Meta:
        model = models.Batch

, где LoggedModel равно

class LoggedModel(DjangoObjectType):
    class Meta:
        model = models.LoggedModel

, первоначально оба унаследованы от DjangoObjectType, но тогда ни один из них не выставлялполе logs, определенное в суперклассе модели

class LoggedModel(models.Model):
    recursive_field = "parent_model"
    logs = models.ManyToManyField(Log, related_name="%(app_label)s_%(class)s")

    class Meta:
        abstract = True

class Anomaly(LoggedModel):
    ...

class Batch(LoggedModel):
    anomalies = models.ManyToManyField(Anomaly)

Теперь, после объявления в схеме Batch подкласса LoggedModel вместо DjangoObjectType, журналы предоставляются для обоих классов.Кто-нибудь может пролить свет?

1 Ответ

1 голос
/ 17 мая 2019

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

Во втором случае выставляется в LoggedModel, таким образом, также для Anomaly и Batch.

Вы должны обнаружить, что они оба работают просто как DjangoObjectType s, если вы явно выставляете в них логи.

Взгляните сюда: https://stackoverflow.com/a/56173485/214150

...