volunteers (WIP)

This commit is contained in:
Élie Bouttier 2016-10-19 23:36:15 +02:00
parent e58f263dce
commit 8a0e858163
14 changed files with 124 additions and 12 deletions

View File

@ -2,9 +2,10 @@ from django.shortcuts import render
from django.contrib.sites.shortcuts import get_current_site
from django.views.generic import CreateView, DetailView, ListView, UpdateView
from ponyconf.mixins import OnSiteFormMixin
from accounts.decorators import staff_required
from accounts.mixins import OrgaRequiredMixin, StaffRequiredMixin
from proposals.mixins import OnSiteFormMixin
from proposals.models import Talk

13
ponyconf/admin.py Normal file
View File

@ -0,0 +1,13 @@
from django.contrib.sites.shortcuts import get_current_site
class SiteAdminMixin:
exclude = ('site',)
def get_queryset(self, request):
return super().get_queryset(request).filter(site=get_current_site(request))
def save_model(self, request, obj, form, change):
if not change:
obj.site = get_current_site(request)
super().save_model(request, obj, form, change)

View File

@ -42,6 +42,7 @@ INSTALLED_APPS = [
'proposals',
'conversations',
'planning',
'volunteers',
# external apps
'djangobower',

View File

@ -4,17 +4,8 @@ from django.contrib.sites.shortcuts import get_current_site
from proposals.models import Conference, Talk, Topic, Track, Event
from planning.models import Room
from ponyconf.admin import SiteAdminMixin
class SiteAdminMixin:
exclude = ('site',)
def get_queryset(self, request):
return super().get_queryset(request).filter(site=get_current_site(request))
def save_model(self, request, obj, form, change):
if not change:
obj.site = get_current_site(request)
super().save_model(request, obj, form, change)
class TalkAdmin(SiteAdminMixin, admin.ModelAdmin):

View File

@ -14,6 +14,8 @@ from django.utils.translation import ugettext as _
from django.views.decorators.http import require_http_methods
from django.http import HttpResponse
from ponyconf.mixins import OnSiteFormMixin
from accounts.models import Participation
from accounts.mixins import OrgaRequiredMixin, StaffRequiredMixin
from accounts.decorators import orga_required, staff_required
@ -27,7 +29,6 @@ from .forms import TalkForm, TopicForm, TrackForm, ConferenceForm, TalkFilterFor
from .models import Talk, Track, Topic, Vote, Conference
from .signals import talk_added, talk_edited
from .utils import allowed_talks, markdown_to_html
from .mixins import OnSiteFormMixin
@login_required

0
volunteers/__init__.py Normal file
View File

12
volunteers/admin.py Normal file
View File

@ -0,0 +1,12 @@
from django.contrib import admin
from ponyconf.admin import SiteAdminMixin
from .models import Activity
class ActivityAdmin(SiteAdminMixin, admin.ModelAdmin):
pass
admin.site.register(Activity, ActivityAdmin)

5
volunteers/apps.py Normal file
View File

@ -0,0 +1,5 @@
from django.apps import AppConfig
class VolunteersConfig(AppConfig):
name = 'volunteers'

View File

@ -0,0 +1,34 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10 on 2016-10-19 21:17
from __future__ import unicode_literals
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
('sites', '0002_alter_domain_unique'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='Activity',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=256, verbose_name='Name')),
('description', models.TextField(blank=True, verbose_name='Description')),
('participants', models.ManyToManyField(blank=True, to=settings.AUTH_USER_MODEL, verbose_name='Participants')),
('site', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sites.Site')),
],
),
migrations.AlterUniqueTogether(
name='activity',
unique_together=set([('site', 'name')]),
),
]

View File

18
volunteers/models.py Normal file
View File

@ -0,0 +1,18 @@
from django.db import models
from django.contrib.sites.models import Site
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import User
class Activity(models.Model):
site = models.ForeignKey(Site, on_delete=models.CASCADE)
name = models.CharField(max_length=256, verbose_name=_('Name'))
description = models.TextField(blank=True, verbose_name=_('Description'))
participants = models.ManyToManyField(User, blank=True, verbose_name=_('Participants'))
class Meta:
unique_together = ('site', 'name')
def __str__(self):
return self.name

3
volunteers/tests.py Normal file
View File

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

33
volunteers/views.py Normal file
View File

@ -0,0 +1,33 @@
from django.shortcuts import render
from django.contrib.sites.shortcuts import get_current_site
from django.views.generic import CreateView, DetailView, ListView, UpdateView
from ponyconf.mixins import OnSiteFormMixin
from accounts.mixins import OrgaRequiredMixin, StaffRequiredMixin
class ActivityMixin(object):
def get_queryset(self):
return Activity.objects.filter(site=get_current_site(self.request)).all()
class ActivityFormMixin(OnSiteFormMixin):
form_class = ActivityForm
class ActivityList(StaffRequiredMixin, RoomMixin, ListView):
pass
class ActivityCreate(OrgaRequiredMixin, RoomMixin, RoomFormMixin, CreateView):
model = Activity
class ActivityUpdate(OrgaRequiredMixin, RoomMixin, RoomFormMixin, UpdateView):
pass
class ActivityDetail(StaffRequiredMixin, RoomMixin, DetailView):
pass