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

[гиперссылкой Идентичность Field] (http://www.django-rest-framework.org/api-guide/relations/#hyperlinkedidentityfield) является то, что я думаю о , но нет URL-адреса, называемого 'employee-list' (если я не объявляю его explicite). Я попробовал с 'users-list', но он тоже не работал. – alekwisnia

+0

@alekwisnia Имеет смысл, что нет списка сотрудников, я просто основывался на ваших полях сериализатора. Сначала попробуйте 'user-list', чтобы быть прилежным, поскольку Django имеет тенденцию создавать уникальные имена от моделей (например,« список пользователей »и« пользовательская деталь ». – tredzko

Смежные вопросы