Фильтр Django Manytomanyfield - PullRequest
       8

Фильтр Django Manytomanyfield

0 голосов
/ 18 марта 2019

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

в приложении есть две модели, которые связаны параметром поля многие ко многими версия.проблема в том, что я хочу отфильтровать свою опцию и получить только опцию, относящуюся к номеру версии, и только к тем, которые имеют (по умолчанию True).вот мои модели

class Option(models.Model):
    Code_Option = models.CharField(max_length=20, primary_key=True)
    Nom_Option = models.CharField(max_length=100)
    option_Version = models.ManyToManyField(Version,through='Option_Version')

class Option_Version(models.Model):
    option = models.ForeignKey(Option, on_delete=models.CASCADE)
    version = models.ForeignKey(Version, on_delete=models.CASCADE)
    Default = models.BooleanField(default = False)

class Version(models.Model):
    Code_Version = models.CharField(max_length=20, primary_key=True)
    Nom_Version = models.CharField(max_length=200)
    Id_Modele = models.ForeignKey(Modele, on_delete=models.CASCADE, related_name='Version_set')

и вот что я пытался сделать

class Option_defaut_Version(ListAPIView):
    serializer_class = Option_Sereializer

    def get_queryset(self):
        id_version = self.kwargs['Id_Version'] 
//id version refers to Code_Version from Version (it's the PK) and I get it from the url ex: option/default/<srt:Id_Version>
        return Option.objects.filter(option_Version__version = id_version).filter(option_Version__default = "True")

, а вот мои sereilasers:

class Option_Sereializer(serializers.ModelSerializer):

    class Meta:
        model = Option
        fields = [
            'Code_Option',
            'Nom_Option',
            'option_Version'
        ]

class Option_Version_Sereializer(serializers.ModelSerializer):

    class Meta:
        model = Option_Version
        fields = [
            'option',
            'version',
            'Default'
        ]
class Version_Sereializer(serializers.ModelSerializer):

    class Meta:
        model = Version
        fields = [
            'Nom_Version',
            'Code_Version'
        ]

также я попробовал это:

class option_version_default(ListAPIView):
    serializer_class = Option_Version_Sereializer
    def get_queryset(self):
        return Option_Version.objects.all()

результатом была ошибка:

AttributeError at /option/default/v1

type object 'Option_Version' has no attribute 'objects'

если бы кто-нибудь мог мне помочь, я бы оценил это

ps: я видел много других вопросов и ответовтакже док от django django rest, но это мне не помогло

...