django manytomanyfield过滤器

时间:2019-03-17 21:25:28

标签: django django-rest-framework manytomanyfield

所以我正在用django django rest构建一个应用程序,并且我的模型中的很多领域都有一些问题,

在应用程序中,有两个模型通过多对多字段选项和版本进行连接。问题是我想过滤我的选项,并且仅获取与多个版本相关的选项,并且仅获取那些具有(Default 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的文档,但这并没有帮助我

0 个答案:

没有答案