Django如何在类中注册用户
Posted
技术标签:
【中文标题】Django如何在类中注册用户【英文标题】:Django How to Register user in classes 【发布时间】:2015-08-07 10:40:26 【问题描述】:我目前正在使用 Django 1.8.3 和 Python 3.4,我创建了以下站点,这是一个用于注册课程 (http://imgur.com/G5JvCzY) 的模拟站点,其中标题链接到另一个页面,例如 (http://imgur.com/cZlfyBn) ,我想做的是让超级用户能够通过第2页中的按钮在这些类中“注册”,有什么建议吗?下面是我的代码,对不起文字墙:
项目目录:
* cacademy:
* __pycache__
* __init__
* settings
* urls
* wsgi
* Classes:
* __pycache__
* migrations
* static
* __init__
* admin
* models
* tests
* urls
* views
* templates:
* cacademy:
* base.html
* classes_list.html
* courses_detail.html
*accounts:
* __pycache__
* migrations
* __init__
* admin
* models
* tests
* urls
* views
* db.sqlite3
* manage.py
我的模特:
from django.db import models
from django.utils import timezone
class Course(models.Model):
title = models.CharField(max_length=200)
text = models.TextField()
teachername = models.TextField(max_length=200)
teacherinfo = models.TextField()
started_date = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.title
我的观点:
from django.shortcuts import render
from django.utils import timezone
from .models import Course
from django.shortcuts import render, get_object_or_404
def classes_list(request):
courses = Course.objects.filter(started_date__lte=timezone.now()).order_by('started_date')
return render(request, 'cacademy/classes_list.html', 'courses': courses)
def course_detail(request, pk):
course = get_object_or_404(Course, pk=pk)
return render(request, 'cacademy/courses_detail.html', 'course': course)
我的学院\urls.py:
from django.conf.urls import include, url
from Classes import views
from django.contrib import admin
admin.autodiscover()
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^$', views.classes_list, name='classes_list'),
url(r'^(?P<pk>[0-9]+)/course/$', views.course_detail, name='course_detail'),
url(r'^accounts/', include('accounts.urls', namespace='accounts')),
]
我知道我可以将 ForeignKey 用于 OneToMany 关系,但我无法掌握如何将其输入到我的代码中的想法,我希望超级用户在上面的这些课程中注册,任何帮助将不胜感激。
谢谢
【问题讨论】:
【参考方案1】:在模型级别您可以使用ManyToMany
关系将用户与课程联系起来,如下所示:
class Course(models.Model):
title = models.CharField(max_length=200)
text = models.TextField()
teachername = models.TextField(max_length=200)
teacherinfo = models.TextField()
started_date = models.DateTimeField(default=timezone.now)
users = models.ManyToManyField('auth.User', verbose_name='Students',
related_name='courses', null=True, blank=True)
def __str__(self):
return self.title
然后在 POST 处理程序的视图中,您可以检查request.user.is_superuser
属性,如果为真,则通过course.users.add(user)
将用户注册到课程。您可以在Django documentation site找到详细信息
【讨论】:
感谢您的信息,但每个新“课程”都会自动拥有所有用户,我该如何删除它们? @Sylas 不,不是。每个新课程在创建时都没有用户,这只是两个表之间的数据库层关系:课程和用户。当您需要将用户添加到课程时,您可以使用course.users.add(user)
,当您需要删除它时,使用course.users.remove(user)
。在这些操作之一之后,您应该执行course.save()
。以上是关于Django如何在类中注册用户的主要内容,如果未能解决你的问题,请参考以下文章