2015-08-07 5 views
0

В настоящее время я использую Django 1.8.3 и Python 3.4, я создал следующий сайт, который является макетным сайтом для подписки на курсы (http://imgur.com/G5JvCzY), где названия связаны с другой страницей, например (http://imgur.com/cZlfyBn), что я хочу сделать, чтобы суперпользователь смог «зарегистрировать» в этих классах через кнопку на странице 2, любые предложения, как это сделать? Вот мой код ниже, извините за стену текста:Django Как зарегистрировать пользователя в классах

Directory Project:

* 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}) 

Мой cacademy \ 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, но я не могу понять идею ввода его в свой код, я хочу, чтобы суперпользователь зарегистрировался в этих курсах выше, любая помощь была бы оценена ,

Благодаря

ответ

0

На уровне модели можно использовать 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

+0

спасибо за информацию, но каждый новый «курс» имеет автоматически всех пользователей, как я могу их удалить? – Sylas

+0

@ Силы Нет, это не так. Каждый новый курс не имеет пользователей при создании, это только отношение уровня базы данных между двумя таблицами: курс и пользователь. Когда вам нужно добавить пользователя к курсу, вы можете использовать 'course.users.add (user)' и когда вам нужно его удалить - 'course.users.remove (user)'. После одной из этих операций вы должны выполнить 'course.save()'. – zen11625

Смежные вопросы