Disons que j'ai deux modèles.Django Rest DRF: accès à une référence de clé étrangère à partir de la relation inverse
Modèle
class Item(models.Model):
name = models.CharField(max_length=32)
# other fields
class ItemRelation(models.Model):
item = models.ForeignKey(Item, related_name='relations_item')
user = models.ForeignKey(User, related_name='relations_user')
has_viewed = models.BooleanField(default=False)
has_loved = models.BooleanFields(default=False)
Maintenant, ce que je veux faire est d'obtenir le profil d'un utilisateur qui contiendrait les éléments associés à cet utilisateur ayant has_loved = True et has_viewed = True.
Dans mon fichier views.py, j'avais quelque chose comme ça.
class UserProfile(APIView):
def get(self, request, format=None):
id = self.request.query_params.get('id')
user = User.objects.filter(id=id).prefetch_related(Prefetch(
'relations_user', queryset=ItemRelation.objects.select_related('item').filter(has_viewed=True),
to_attr='item_viewed'
))
J'étais certain que je me suis trompé et j'ai aussi eu une erreur de sérialiseur, depuis que je suis en train de sérialisation un objet ItemRelation à l'aide d'un sérialiseur qui a utilisé l'élément comme son modèle.
EDIT
serializers.py
class ItemSerializer(seralizer.ModelSerializer):
class Meta:
model = Item
fields = ['name']
class UserSerializer(serializers.ModelSerializer):
relations_user = ItemSerializer(read_only=True, many=True)
class Meta:
model = User
fields = ['username', 'relations_user']
où êtes-vous sérialiseurs? montre le '' 'serializers.py'''. Et vous ne déclarez pas '' '' serializer_class''' dans votre vue. – Bestasttung
bien n'utilisant pas rest_framework.generics ici donc pas serializer_class, et aussi je suis certain que mon problème réside dans la façon dont j'interroge les éléments en utilisant Prefetch. – flaire
vous parlez d'une erreur sérialiseur, pourquoi en parlez-vous s'il n'y a pas de problème? – Bestasttung