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.contrib.sites.shortcuts import get_current_site
from django.views.generic import CreateView, DetailView, ListView, UpdateView from django.views.generic import CreateView, DetailView, ListView, UpdateView
from ponyconf.mixins import OnSiteFormMixin
from accounts.decorators import staff_required from accounts.decorators import staff_required
from accounts.mixins import OrgaRequiredMixin, StaffRequiredMixin from accounts.mixins import OrgaRequiredMixin, StaffRequiredMixin
from proposals.mixins import OnSiteFormMixin
from proposals.models import Talk 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', 'proposals',
'conversations', 'conversations',
'planning', 'planning',
'volunteers',
# external apps # external apps
'djangobower', '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 proposals.models import Conference, Talk, Topic, Track, Event
from planning.models import Room 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): 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.views.decorators.http import require_http_methods
from django.http import HttpResponse from django.http import HttpResponse
from ponyconf.mixins import OnSiteFormMixin
from accounts.models import Participation from accounts.models import Participation
from accounts.mixins import OrgaRequiredMixin, StaffRequiredMixin from accounts.mixins import OrgaRequiredMixin, StaffRequiredMixin
from accounts.decorators import orga_required, staff_required 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 .models import Talk, Track, Topic, Vote, Conference
from .signals import talk_added, talk_edited from .signals import talk_added, talk_edited
from .utils import allowed_talks, markdown_to_html from .utils import allowed_talks, markdown_to_html
from .mixins import OnSiteFormMixin
@login_required @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