Moved project list to model

This commit is contained in:
Tris Forster 2023-02-23 18:37:21 +11:00
parent 6ec5808275
commit f49ff0fd0e
3 changed files with 22 additions and 12 deletions

View File

@ -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

View File

@ -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()

View File

@ -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