Невозможно получить доступ ко всем данным из prefetch_related, только к первому элементу массива?

У меня есть следующие три модели, которые находятся в отношениях "многие ко многим": PokemonTypesTest и BasePokemonTest связаны через промежуточную таблицу WeakResistImmune

class PokemonTypesTest(models.Model):
    name = models.CharField(max_length=25, unique=True)

    def __str__(self):
        return self.name



class BasePokemonTest(models.Model):
    name = models.CharField(max_length=50, unique=True)
    base_hp = models.IntegerField()
    base_atk = models.IntegerField()
    base_def = models.IntegerField()
    base_spatk = models.IntegerField()
    base_spdef = models.IntegerField()
    base_speed = models.IntegerField()
    type1 = models.ForeignKey(PokemonTypesTest, null=True, on_delete=models.SET_NULL, related_name='pokemontype1')
    type2 =  models.ForeignKey(PokemonTypesTest, null=True, on_delete=models.SET_NULL, related_name='pokemontype2')
    type3 =  models.ForeignKey(PokemonTypesTest, null=True, on_delete=models.SET_NULL, related_name='pokemontype3')
    ability1 = models.CharField(max_length=25, default='n/a') #these abilities (ability1, ability2 and hidden_ability will need to be moved to a many-to-many table)
    ability2 = models.CharField(max_length=25, default='n/a') #where a pokemon id from basepokemon table is linked to a ability id
    hidden_ability = models.CharField(max_length=40, default='n/a')
    pokemon_id = models.IntegerField(default=0)


    weaknessResistanceImmune = models.ManyToManyField(PokemonTypesTest, through='WeakResistImmune')



class WeakResistImmune(models.Model):
    #in the typing field, 1 is weakness
    pokemon = models.ForeignKey(BasePokemonTest, on_delete=models.CASCADE)
    weak_resist_immune = models.CharField(max_length=25)
    typing = models.ForeignKey(PokemonTypesTest, on_delete=models.CASCADE)
    multiplier = models.DecimalField(max_digits=5, decimal_places=2)

    def __str__(self):
        return str(self.pokemon.name) 

Я просматривал документацию и решил, что будет работать следующее:

data = BasePokemonTest.objects.prefetch_related('weaknessResistanceImmune')

Data возвращает следующий набор запросов

<QuerySet [<BasePokemonTest: Base for - Bulbasaur>, <BasePokemonTest: Base for - Ivysaur>, <BasePokemonTest: Base for - Venusaur>, <BasePokemonTest: Base for - Mega Venusaur>, <BasePokemonTest: Base for - Charmander>]>

Я использовал предварительную выборку для поля отношения "многие ко многим" в модели BasePokemonTest.

Однако, когда я пытаюсь получить доступ к данным, я получаю ошибку-

>>> data[0]
<BasePokemonTest: Base for - Bulbasaur>

>>> data[0].weaknessResistanceImmune
<django.db.models.fields.related_descriptors.create_forward_many_to_many_manager.<locals>.ManyRelatedManager object at 0x00000235D117BD30>

>>> data[0].weaknessResistanceImmune.weak_resist_immune
Traceback (most recent call last):
  File "<console>", line 1, in <module>
AttributeError: 'ManyRelatedManager' object has no attribute 'weak_resist_immune'

Не уверен, где я что-то напутал. Любая помощь была бы признательна!

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