1

J'ai obtenu un modèle simple lié à django contrib auth Modèle d'utilisateur. J'aimerais avoir un CRUD pour Company, mais avec des éléments liés comme url d'une liste plutôt qu'une liste d'éléments (c'est-à-dire un lien vers la liste des employés plutôt que vers la liste des URL d'un seul employé). Qu'est-ce qui manque ici?Django-Rest obtenir l'URL de la liste des enfants liés

models.py

from django.db import models 
from django.contrib.auth import get_user_model 
User = get_user_model() 

class Company(models.Model): 
    name = models.CharField(max_lenght=256) 
    employees = models.ManyToManyField(User) 

serializers.py

from rest_framework import serializers 
from django.contrib.auth import get_user_model 
User = get_user_model() 

from .models import Company 

class CompanySerializer(serializers.HyperlinkedModelSerializers): 

    class Meta: 
     model = Company 
     fields = ('name', 'employees') 

class UserSerializer(serializers.ModelSerializers): 

    class Meta: 
     model = User 
     fields = ('username', 'password', 'email') # and so on 

view.py

from rest_framework import viewsets 
from django.contrib.auth import get_user_model 
User = get_user_model() 
from .models import Company 

from .serializers import UserSerializer, CompanySerializer 

class UserViewset(viewsets.ModelViewSet): 
    serializer_class = UserSerializer 
    queryset = User.objects.all() 

class CompanyViewset(viewsets.ModelViewSet): 
    serializer_class = CompanySerializer 
    queryset = Company.objects.all() 

urls.py

from django conf.urls import url, include 
from rest_framework.routers import DefaultRouter 
from .views import CompanyViewSet, UserViewSet 
router = DefaultRouter() 
router.register(r'company', CompanyViewSet) 
router.register(r'users', UserViewSet) 

urlpatterns = [url(r^api/, include(router.urls))] 

Répondre

0

On dirait que vous cherchez un Hyperlinked Identity Field. Pour vous, il pourrait ressembler à ceci:

class CompanySerializer(serializers.HyperlinkedModelSerializers): 
    employee_listing = serializers.HyperlinkedIdentityField(view_name='employee-list') 

    class Meta: 
     model = Company 
     fields = ('name', 'employee_listing') 
+0

[Hyperlinked champ d'identité] (http://www.django-rest-framework.org/api-guide/relations/#hyperlinkedidentityfield) est ce que je pense , mais il n'y a pas d'URL appelée 'employee-list' (si je ne le déclare pas explicite). J'ai essayé avec 'users-list' mais cela n'a pas fonctionné non plus. – alekwisnia

+0

@alekwisnia Il est logique qu'il n'y ait pas de liste d'employés, j'allais juste basé sur vos champs de sérialiseur. Essayez d'abord 'user-list', juste pour être diligent, puisque Django a tendance à créer des noms singuliers hors des modèles (comme 'user-list' et 'user-detail'. – tredzko