2015-07-20 22 views
0

models.py:是否可以在單一模型的基礎上添加驗證?

import datetime 
from django.db import models 
from pygments.lexers import get_all_lexers 


LEXERS = [item for item in get_all_lexers() if item[1]] 

class Classname(models.Model): 
    class_name = models.CharField(max_length=8) 
    def __str__(self): 
     return self.class_name 

class Sectionname(models.Model): 
    class_name = models.ForeignKey(Classname) 
    section_name = models.CharField(max_length=1, default='A') 
    def __str__(self): 
     return self.section_name 

class Teachername(models.Model): 
    classname = models.ForeignKey(Classname, verbose_name='class Name') 
    secname = models.ForeignKey(Sectionname, verbose_name='sectionname') 
    teachname = models.CharField(max_length=50, verbose_name='teacher Name') 
    def __str__(self): 
     return self.teachname 

class Attendancename(models.Model): 
    teacher_name = models.ForeignKey(Teachername) 
    date = models.DateField('Date') 
    intime = models.TimeField('IN-TIME') 
    outtime = models.TimeField('OUT-TIME') 

    def hours_conversion(self): 
     tdelta = (datetime.datetime.combine(datetime.date.today(),self.outtime) - datetime.datetime.combine(datetime.date.today(),self.intime)) 
     hours, minutes = tdelta.seconds//3600, (tdelta.seconds//60)%60 
    return '{0}hrs {1}mins'.format(hours, minutes) 

    def __str__(self): 
     return "%s" %self.teacher_name 

serializers.py:

from django.forms import widgets 
from rest_framework import serializers 
from .models import Classname, Sectionname, Teachername, Attendancename 


class ClassSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Classname 
     fields = ('id', 'class_name',) 

class SectionSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Sectionname 
     fields = ('id', 'class_name', 'section_name') 

class TeacherSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Teachername 
     fields = ('id', 'classname', 'secname', 'teachname') 

class AttendanceSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Attendancename 
     fields = ('id', 'teacher_name', 'date', 'intime', 'outtime') 

我想增加所有者字段在我的模型來執行DRF認證系統。是否有必要在上面的所有模型中添加'owner'字段?

我正在關注django-rest-framework的教程我有幾個模型如上。是否有可能爲此身份驗證目的創建單個模型,並根據該模型設置序列化程序文件中的權限&以基於該單一模型訪問所有模型?

回答

0

我想增加所有者字段在我的模型來執行DRF認證系統

你不需要所有者字段設置爲「強制」的認證。

如何啓用和DRF處理身份驗證在所有細節在這裏解釋:http://www.django-rest-framework.org/api-guide/authentication/

所有者域只在某些情況下,允許有趣。

如果你看看docs,你會發現DRF已經擁有許多常見的例子,比如IsAuthenticated,IsAdmin等等。根據用戶的狀態(登錄/註銷),他或她可能會看到某些資源。

但是,如果您想設置object level permissions您需要所有者字段(或類似的東西)。

如果某個用戶確實與某個對象相關聯,您還能如何判斷?

這一切的默認的用戶模型(從django.contrib.auth)應該是完全足夠的,我認爲沒有必要進行任何額外的模型假設你使用的the standard Authentication Backends其中一個設置request.user到用戶的一個實例。

+0

謝謝!這真的很有幫助 –

相關問題