如何将Model.viewset中的lookup字段更改为Django Rest Framework中的其他唯一参数?

如何将Model.viewset中的lookup字段更改为Django Rest Framework中的其他唯一参数?,django,django-models,django-rest-framework,django-views,Django,Django Models,Django Rest Framework,Django Views,我正在django rest框架中使用Modelviewset。我想将查找字段更改为电子邮件(唯一),而不是id。我已尝试添加 lookup\u field='email'在我的模式视图集中,但它不工作。这就是我得到的 { “详细信息”:“未找到” } 我如何解决这个问题 my Views.py: class SchemaViewSet(mixins.CreateModelMixin, mixins.ListModelMixin, mixins.RetrieveModelMixin, views

我正在django rest框架中使用Modelviewset。我想将查找字段更改为电子邮件(唯一),而不是id。我已尝试添加
lookup\u field='email'
在我的模式视图集中,但它不工作。这就是我得到的

{
“详细信息”:“未找到”
}
我如何解决这个问题

my Views.py:

class SchemaViewSet(mixins.CreateModelMixin, mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet):

    queryset = models.Schema.objects.all()
    serializer_class = serializers.SchemaSerializer
    lookup_field = 'email'
my models.py:

class Schema(models.Model):
    """Database model for Schema """

    name= models.TextField()
    version = models.TextField()
    email = models.EmailField(unique = True )


    def __str__(self):
        return self.email
my serializers.py:

class SchemaSerializer(serializers.ModelSerializer):
    """Serializes Schema"""

    class Meta:
        model = models.Schema
        fields = (  'id', 'name', 'version', 'email')


按如下方式更新您的代码:

class SchemaSerializer(serializers.ModelSerializer):
"""Serializes Schema"""

class Meta:
    model = models.Schema
    fields = ("id", "email")
    lookup_field = "email"


class SchemaViewSet(viewsets.ModelViewSet):
    queryset = models.Schema.objects.all()
    serializer_class = serializers.SchemaSerializer
    lookup_field = "email"
    lookup_value_regex = "[^/]+"  

仍然{“细节”:“未找到”。}@yathathmeena我已经更新了答案,它对我有效。我在我的问题中添加了这些图片。在用您的代码更新代码后,我仍然得到相同的响应answer@yatharthmeena我的错是,我在字符串字段上检查,电子邮件中包含一个
,它没有被defualt regex解析,导致路由匹配失败。请试试这个,这个正则表达式可以通过所有测试。您可以在这里检查,我觉得一切都很好,您是否尝试过只继承viewsets.ModelViewSet而不是mixin?也许是这样?是的,我试过了。它也不起作用。不管怎样,viewsets.ModelViewSet和mixin都是相似的,只是我不想使用put、patch和delete,这就是为什么要使用mixin