Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django Rest将URL中的primarykey更改为使用自定义密钥_Django_Python 3.x_Django Rest Framework_Django Rest Viewsets - Fatal编程技术网

Django Rest将URL中的primarykey更改为使用自定义密钥

Django Rest将URL中的primarykey更改为使用自定义密钥,django,python-3.x,django-rest-framework,django-rest-viewsets,Django,Python 3.x,Django Rest Framework,Django Rest Viewsets,我有两个模型Stats和Autor,我如何在Autor模型中通过参数subName更改主键以使用unqiue字段搜索我在考虑APIView,但任何人都可以告诉我如何使用它? 例如: models.py class Stats(models.Model): # Fields Word = models.CharField(name='Word',max_length=255) Word_count = models.IntegerField(name="Count") def __str__(

我有两个模型Stats和Autor,我如何在Autor模型中通过参数subName更改主键以使用unqiue字段搜索我在考虑APIView,但任何人都可以告诉我如何使用它? 例如:

models.py

class Stats(models.Model):

# Fields
Word = models.CharField(name='Word',max_length=255)
Word_count = models.IntegerField(name="Count")

def __str__(self):
    return self.Word+":"+str(self.Count)

class Autor(models.Model):

name = models.CharField(max_length=255)
sub_name = models.CharField(name='Subname', max_length=255, default='puste')
# Relationship Fields
words = models.ManyToManyField(Stats)
序列化程序.py

class StatsSerializer(serializers.ModelSerializer):
class Meta:
    model=Stats
    fields=('Word','Count')

class AutorSerializer(serializers.ModelSerializer):
words=StatsSerializer(read_only=True,many=True)
class Meta:
    model=Autor
    fields=('name','words')
Views.py

class AutorView(viewsets.ModelViewSet):
queryset = Autor.objects.all()
serializer_class = AutorSerializer

class StatsView(viewsets.ModelViewSet):
    serializer_class = StatsSerializer
    queryset = Stats.objects.all()
url.py

from django.contrib import admin
from django.urls import path,include
from Teonite import views
from rest_framework import routers

router=routers.DefaultRouter()
router.register('autors',views.AutorView)

urlpatterns = [
    path('',include(router.urls))
]
我使用django 2.0、python 3.6和django REST framework 3.8.2,首先,将sub_name字段设置为唯一,如下所示:

然后,将视图中的查找字段属性更改为

如果您没有在模型中更改为unique字段,则可能会导致错误,因为Detail API只针对lookup字段检索一个实例

class Autor(models.Model):
    name = models.CharField(max_length=255)
    sub_name = models.CharField(name='Subname', max_length=255, default='puste',unique=True)
    # Relationship Fields
    words = models.ManyToManyField(Stats)
class AutorView(viewsets.ModelViewSet):
    queryset = Autor.objects.all()
    serializer_class = AutorSerializer
    lookup_field = sub_name