Django Queryset не работает после преобразования в дочерний класс класса Abstract

Более года я строю многие свои запросы, используя Django Model, где у меня есть простые отношения между не абстрактными объектами модели, и все работало отлично :

class Taxon(models.Model):
    parent = models.ForeignKey("self", on_delete=models.CASCADE, null=True, blank=True, related_name='children')
    rank = models.CharField(max_length=200, unique=False, default="NA")
    name = models.CharField(max_length=200, unique=False, default="NA")

class Sequence(models.Model):
    taxon = models.ForeignKey(Taxon, null=True, blank=True, on_delete=models.CASCADE)
    amplicon = models.CharField(max_length=1000, unique=False)
    sequence = models.CharField(max_length=1000, unique=False)
    score = models.FloatField()

Пример набора запросов с использованием моей модели :

taxon.sequence_set.filter(stuff_filtering)

Но недавно мне пришлось применить некоторые изменения в моей базе данных, и мои объекты Sequence теперь производны от абстрактного класса Observation, становясь такими

class Observation(models.Model):
    taxon = models.ForeignKey(Taxon, null=True, blank=True, on_delete=models.CASCADE)

    class Meta:
        abstract = True

class Sequence(Observation):
    amplicon = models.CharField(max_length=1000, unique=False)
    sequence = models.CharField(max_length=1000, unique=False)
    score = models.FloatField()

    def __str__(self):
        return str((self.amplicon, self.sequence, self.score, self.taxon))

Я ничего не менял в своем наборе запросов, потому что в документации django об абстрактном классе (https://docs.djangoproject.com/en/3.2/topics/db/models/) говорится, что вы все еще можете использовать ваш chlid_set в запросе. Однако я столкнулся с этой ошибкой и не могу понять почему.

AttributeError: 'QuerySet' object has no attribute 'sequence_set'

Зная, что в случае абстрактных базовых классов, в db должна быть создана таблица для каждого дочернего объекта с родительским атрибутом... Итак, у меня есть объект Sequence со связанным объектом Taxon

По-видимому, решением этой проблемы является получение объекта Taxon с помощью get, а не фильтра (событие, если возвращается только один объект).

taxon = Taxon.objects.filter(...)  

возврат только одного значения стал

taxon = Taxon.objects.get(...)

Для меня это кажется довольно загадочным, так как я до сих пор не понимаю, почему он прекрасно работал с моей предыдущей моделью

Вернуться на верх