簡體   English   中英

如何將 Djoser 與多個擴展用戶一起使用?

[英]How to use Djoser with multiple extended users?

您好,我是 django django rest 框架和 djoser 的新手,我只是想知道。 如何將 djoser 與多個擴展用戶一起使用。 下面是我的 model、序列化器和視圖。 我在互聯網上真的找不到任何東西。 Djoser 文檔沒有關於多個用戶的任何內容。 我應該只使用 Django Rest 框架的內置令牌身份驗證嗎?

Model:我正在嘗試與學生 model 和老師 model 一起繼承用戶(如下所示)。 我希望 djoser 使用這兩個 model 來創建用戶。

from django.db import models
from django.contrib.auth.models import User
from django.conf import settings
# Create your models here.

class Student(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True, related_name='student')
    age = models.IntegerField()
    address = models.CharField(max_length=200)

    def __str__(self):
        return self.user.username

class Teacher(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True, related_name='teacher')
    description = models.TextField()

    def __str__(self):
        return self.user.username

class Course(models.Model):
    name = models.CharField(max_length=200)
    description = models.TextField()
    price = models.FloatField(default=25.00)

    def __str__(self):
        return self.name

序列化器:

我的序列化程序還沒有完成,但我仍然需要重寫 create 和 update 方法。

from rest_framework import serializers
from api.models import *
from django.contrib.auth.models import User

class StudentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Student
        fields = ('age', 'address')

class StudentUserSerializer(serializers.ModelSerializer):

    student = StudentSerializer()

    class Meta:
        model = User
        fields = ('id', 'username', 'email', 'password', 'first_name', 'last_name', 'student')
        extra_kwargs = {'password': {'write_only': True, 'required': True}}

class TeacherSerializer(serializers.ModelSerializer):
    class Meta: 
        model = Teacher
        fields = ('description', )

class TeacherUserSerializer(serializers.ModelSerializer):

    teacher = TeacherSerializer()

    class Meta:
        model = User
        fields = ('id', 'username', 'email', 'password', 'first_name', 'last_name', 'teacher') 
        extra_kwargs = {'password': {'write_only': True, 'required': True}}

class CourseSerializer(serializers.ModelSerializer):

    class Meta:
        model = Course
        fields = '__all__'

意見:

除了我的觀點,我還必須為這些觀點設置權限。

from django.shortcuts import render
from rest_framework.viewsets import ModelViewSet
from api.serializers import *
from api.models import *
from django.contrib.auth.models import User
# Create your views here.

class CourseView(ModelViewSet):
    serializer_class = CourseSerializer
    queryset = Course.objects.all()

class StudentView(ModelViewSet):
    serializer_class = StudentUserSerializer
    queryset = User.objects.all()

class TeacherView(ModelViewSet):
    serializer_class = TeacherUserSerializer
    queryset = User.objects.all()

覆蓋TeacherViewStudentViewModelViewsetperform_create()方法以創建用戶 object。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM