如何将Model.viewset中的lookup字段更改为Django Rest Framework中的其他唯一参数?
我正在django rest框架中使用Modelviewset。我想将查找字段更改为电子邮件(唯一),而不是id。我已尝试添加如何将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
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