Django Rest 更改 URL 中的主键以使用自定义键
Django Rest change primarykey in URL to use custom key
我有两个模型 Stats 和 Autor,我如何更改主键以使用按参数(Autor 模型中的子名)搜索的唯一字段我正在考虑 APIView 但任何人都可以告诉我如何使用它?
示例:http://127.0.0.1:8000/autors/Subname
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)
serializers.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()
Urls.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 框架 3.8.2
首先,将sub_name
字段设为unique
,
class Autor(models.Model):
name = models.CharField(max_length=255)
sub_name = models.CharField(name='Subname', max_length=255, default='puste'<b>,unique=True</b>)
# Relationship Fields
words = models.ManyToManyField(Stats)
然后,将视图中的 lookup-field 属性更改为
class AutorView(viewsets.ModelViewSet):
queryset = Autor.objects.all()
serializer_class = AutorSerializer
<b>lookup_field = sub_name</b>
如果您没有更改为模型中的唯一字段,则可能会导致错误,因为 Detail API
仅检索 One
相对于 lookup-field
的实例
我有两个模型 Stats 和 Autor,我如何更改主键以使用按参数(Autor 模型中的子名)搜索的唯一字段我正在考虑 APIView 但任何人都可以告诉我如何使用它? 示例:http://127.0.0.1:8000/autors/Subname
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)
serializers.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()
Urls.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 框架 3.8.2
首先,将sub_name
字段设为unique
,
class Autor(models.Model):
name = models.CharField(max_length=255)
sub_name = models.CharField(name='Subname', max_length=255, default='puste'<b>,unique=True</b>)
# Relationship Fields
words = models.ManyToManyField(Stats)
然后,将视图中的 lookup-field 属性更改为
class AutorView(viewsets.ModelViewSet):
queryset = Autor.objects.all()
serializer_class = AutorSerializer
<b>lookup_field = sub_name</b>
如果您没有更改为模型中的唯一字段,则可能会导致错误,因为 Detail API
仅检索 One
相对于 lookup-field