Moved project list to model
This commit is contained in:
parent
6ec5808275
commit
f49ff0fd0e
@ -134,6 +134,19 @@ class Project(models.Model):
|
||||
def auth(self):
|
||||
return sign_data(f'{self.pk}-{self.nonce}', 12)
|
||||
|
||||
@classmethod
|
||||
def for_user(cls, user, project_keys=[], ensemble_keys=[]):
|
||||
projects = cls.objects.select_related('ensemble')
|
||||
if user.is_superuser:
|
||||
return projects
|
||||
|
||||
f = models.Q(pk__in=project_keys) | models.Q(ensemble__slug__in=ensemble_keys)
|
||||
|
||||
if user.is_authenticated:
|
||||
f |= models.Q(ensemble__admins=user.pk)
|
||||
|
||||
return projects.filter(f)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
@ -254,16 +254,9 @@ class ProjectListView(ProjectMixin, ListView):
|
||||
return True
|
||||
|
||||
def get_project_queryset(self):
|
||||
projects = models.Project.objects.select_related('ensemble')
|
||||
if self.request.is_admin:
|
||||
return projects
|
||||
|
||||
f = Q(pk__in=self.get_authorized_keys('project').keys()) | Q(ensemble__slug__in=self.get_authorized_keys('ensemble').keys())
|
||||
|
||||
if self.request.user.is_authenticated:
|
||||
f |= Q(ensemble__admins=self.request.user.pk)
|
||||
|
||||
return projects.filter(f)
|
||||
return models.Project.for_user(self.request.user,
|
||||
self.get_authorized_keys('project'),
|
||||
self.get_authorized_keys('ensemble'))
|
||||
|
||||
def get_queryset(self):
|
||||
qs = self.get_project_queryset()
|
||||
|
||||
@ -248,7 +248,7 @@ class WorkUpdateView(CollectionMixin, UpdateView):
|
||||
|
||||
|
||||
|
||||
class WorkAddToProject(ProjectMixin, FormView):
|
||||
class WorkAddToProject(CollectionMixin, FormView):
|
||||
admin_required = True
|
||||
form_class = forms.ProjectSelectForm
|
||||
template_name = "interface/default_form.html"
|
||||
@ -261,8 +261,12 @@ class WorkAddToProject(ProjectMixin, FormView):
|
||||
f = super(WorkAddToProject, self).get_form()
|
||||
qs = f.fields['project'].queryset
|
||||
|
||||
# Limit to projects for ensembles where we are an admin and they haven't occured yet
|
||||
qs = qs.filter(ensemble__admins=self.request.user, event_date__gt=now())
|
||||
|
||||
# dont show projects already added to
|
||||
work = self.get_object()
|
||||
qs = qs.filter(ensemble_id=self.request.ensemble_id).exclude(pk__in=work.projects.all())
|
||||
qs = qs.exclude(pk__in=work.projects.all())
|
||||
|
||||
f.fields['project'].queryset = qs
|
||||
return f
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user