我试图避免数据库命中我的views.py。如果我使用 F() 和 ExpressionWrapper,我是否对数据库进行查询?我正在尝试优化我的代码,当我阅读文档时有点困惑。我还包含了 Models.py 以供参考。我正在对我正在工作的网络应用程序进行优化。
视图.py
from django.shortcuts import render
from django.db.models import F, Q, Count, Sum, ExpressionWrapper, IntegerField
from .models import Student, Subject, Enrollment
def home(request):
student = Student.objects.all()
subject = Subject.objects.all()
sem_score = Enrollment.objects.all().update(sem_score=ExpressionWrapper((F("prelim_score") + F("midterm_score") + F("final_score"))/3, output_field=IntegerField()))
enrollment = Enrollment.objects.all()
num_student = Enrollment.objects.all().count()
context = {"student":student, "subject":subject, "enrollment":enrollment, "num_student":num_student}
return render(request, 'core/home.html', context)
Run Code Online (Sandbox Code Playgroud)
模型.py
class Professor(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Student(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Course(models.Model):
name …Run Code Online (Sandbox Code Playgroud) 每次用户登录时我都会收到错误。该函数应显示与用户关联的令牌,但我收到一条错误消息“ObtainAuthToken”对象,该对象没有属性“request”。
视图.py
from rest_framework.authtoken.serializers import AuthTokenSerializer
from rest_framework.authtoken.views import ObtainAuthToken
class LoginView(generics.CreateAPIView):
serializer_class = AuthTokenSerializer
def create(self, request):
return ObtainAuthToken().post(request)
Run Code Online (Sandbox Code Playgroud)
已安装的应用程序
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'core',
'rest_framework',
'rest_framework.authtoken',
]
Run Code Online (Sandbox Code Playgroud)