1

django contrib authユーザーモデルに関連する単純なモデルがあります。私は会社のCRUDを持っていますが、要素のリストではなく、リストのURLとして関連要素を設定しています(つまり、単一従業員のURLリストではなく従業員リストへのリンク)。ここには何が欠けていますか?Django-Restは関連する子リストのURLを取得します

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))] 

答えて

0

あなたはHyperlinked Identity Fieldを探しているようですね。あなたのために、それは次のようになります。

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

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

[ハイパーリンクのアイデンティティフィールド](http://www.django-rest-framework.org/api-guide/relations/#hyperlinkedidentityfieldは)私が何を考えていますしかし、私がそれを明示的に宣言しなければ、 'employee-list'というURLはありません。私は 'users-list'で試しましたが、うまくいきませんでした。 – alekwisnia

+0

@alekwisnia従業員リストはありませんが、私はちょうどシリアライザフィールドに基づいています。 Djangoはモデル(例えば、 'user-list'や 'user-detail'など)から単数名を作成する傾向があるので、 'user-list'を最初に試してください。 – tredzko

関連する問題