【问题标题】:Django-Rest get URL of related children listDjango-Rest 获取相关子列表的 URL
【发布时间】:2017-01-27 11:56:20
【问题描述】:

我得到了一个与 django contrib auth User 模型相关的简单模型。我想为公司创建一个 CRUD,但将相关元素设置为列表的 url 而不是元素列表(即指向员工列表的链接而不是单个员工的 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)

序列化器.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))]

【问题讨论】:

    标签: django foreign-keys django-rest-framework django-authentication


    【解决方案1】:

    听起来您正在寻找Hyperlinked Identity Field。对你来说,它可能看起来像这样:

    class CompanySerializer(serializers.HyperlinkedModelSerializers):
        employee_listing = serializers.HyperlinkedIdentityField(view_name='employee-list')
    
        class Meta:
            model = Company
            fields = ('name', 'employee_listing')
    

    【讨论】:

    • Hyperlinked Identity Field 是我的想法,但没有名为employee-list 的网址(如果我不明确声明的话)。我试过users-list,但也没有用。
    • @alekwisnia 没有员工列表是有道理的,我只是根据您的序列化程序字段进行操作。首先尝试user-list,只是为了勤奋,因为 Django 倾向于从模型中创建单数名称(例如 'user-list' 和 'user-detail'。
    猜你喜欢
    • 2015-04-27
    • 2011-02-01
    • 2021-04-21
    • 2018-10-09
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    • 2019-12-23
    • 2016-10-20
    相关资源
    最近更新 更多