Je crée actuellement une API avec le framework Django REST. Je l'écris en étudiant tous les jours, je vais donc l'écrire ici pour ne pas l'oublier.
■ Ce que vous voulez faire Lorsque je frappe le champ spécifié par la clé étrangère dans le modèle avec URL, je veux l'obtenir en spécifiant la valeur au lieu du numéro d'identification!
Vous trouverez ci-dessous le résultat de Rest qui est renvoyé lorsque vous appuyez sur l'URL.
python
URL:http://127.0.0.1:8000/my_names
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"my_name": "noge",
}
]
}
URL:http://127.0.0.1:8000/my_name_rules
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"my_name": "1",
"my_name_rule": "noge is rule.",
}
]
}
Exemple de ce que vous voulez faire) http://127.0.0.1:8000/my_name_rule/1 <-pas '1' Je veux l'obtenir avec http://127.0.0.1:8000/my_name_rule/noge <- 'noge'
models.py
from django.db import models
class MyName(models.Model):
my_name = models.CharField(max_length=255, unique=True)
def __unicode__(self):
return self.my_name
class Meta(object):
db_table = 'my_name'
class MyNameRule(models.Model):
my_name = models.ForeignKey(MyName)
my_name_rule = models.CharField(max_length=255)
def __unicode__(self):
return self.my_name_rule
class Meta(object):
db_table = 'my_name_rule'
serializers.py
from rest_framework import serializers
from noge.apps.noge.models import MyName
from noge.apps.noge.models import MyNameRule
class MyNameRuleSerializer(serializers.ModelSerializer):
class Meta(object):
model = MyNameRule
fields = ('my_name', 'my_name_rule')
class MyNameSerializer(serializers.ModelSerializer):
class Meta(object):
model = MyName
fields = ('my_name')
views.py
from rest_framework import viewsets
from rest_framework import generics
from rest_framework.permissions import IsAuthenticated
from noge.apps.noge.models import MyName
from noge.apps.noge.models import MyNameRule
from noge.apps.noge.serializers import MyNameSerializer
from noge.apps.noge.serializers import MyNameRuleSerializer
class MyNameViewSet(viewsets.ModelViewSet):
queryset = MyName.objects.all()
serializer_class = MyNameSerializer
permission_classes = (IsAuthenticated,)
class MyNameRuleViewSet(viewsets.ModelViewSet):
queryset = MyNameRule.objects.all()
serializer_class = MyNameRuleSerializer
permission_classes = (IsAuthenticated,)
class MyNameRuleFilterViewSet(generics.ListAPIView):
serializer_class = MyNameRuleSerializer
def get_queryset(self):
query_my_name = self.kwargs['my_name']
return MyNameRule.objects.filter(my_name__my_name=query_my_name)
urls.py
from rest_framework import routers
from noge.apps.noge import views
from noge.apps.noge.views import MyNameRuleFilterViewSet
router = routers.DefaultRouter(trailing_slash=False)
router.register(r'my_names', views.MyNameViewSet)
router.register(r'my_name_rules', views.MyNameRuleViewSet)
urlpatterns = patterns('noge.apps.noge.views',
url(r'^v1/my_name_rules/(?P<my_name>\w+)/$',MyNameRuleFilterViewSet.as_view()),
url(r'^v1/', include(router.urls)),
url(r'^$', 'index', name='index'),)
Vous devriez pouvoir le faire! C'est tout (`・ ω ・ ´) ゞ
Recommended Posts