Allow only 5 maintainers, one needs to be your own + help text
This commit is contained in:
parent
f25d07ccf7
commit
e9aeca1f32
|
@ -60,29 +60,31 @@ class MntFormMixin(object):
|
||||||
if not hasattr(self, "_create"):
|
if not hasattr(self, "_create"):
|
||||||
self._create = not (instance and instance.pk)
|
self._create = not (instance and instance.pk)
|
||||||
|
|
||||||
mntWhens = [When(auth=self._user, then=2)]
|
mntQs = orderQueryset(Maintainer.objects.all(), Q(auth=self._user), Q(pk__in=instance.mnt_by.all()) if not self._create else None)
|
||||||
if not self._create:
|
|
||||||
mntWhens.append(When(handle__in=instance.mnt_by.all().values_list("handle"), then=1))
|
|
||||||
mntQs = Maintainer.objects.annotate(card=Case(*mntWhens, default=0, output_field=IntegerField())).order_by("-card")
|
|
||||||
# NOTE: We cannot use distinct on a field as some db backends don't support it
|
|
||||||
#self.fields["mnt_by"].queryset = mntQs.distinct("handle")
|
|
||||||
self.fields["mnt_by"].queryset = mntQs
|
self.fields["mnt_by"].queryset = mntQs
|
||||||
|
|
||||||
if "mnt_lower" in self.fields:
|
if "mnt_lower" in self.fields:
|
||||||
self.fields["mnt_lower"].queryset = mntQs
|
self.fields["mnt_lower"].queryset = mntQs
|
||||||
|
|
||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
cleaned_data = super(MntFormMixin, self).clean()
|
cleaned_data = super(MntFormMixin, self).clean()
|
||||||
|
|
||||||
if not self.errors and self._create:
|
if not self.errors:
|
||||||
mnts = self._user.maintainer_set.all()
|
if self._create:
|
||||||
|
# at least one own mnt on creation
|
||||||
|
mnts = self._user.maintainer_set.all()
|
||||||
|
|
||||||
|
for mnt in cleaned_data['mnt_by']:
|
||||||
|
if mnt in mnts:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
raise forms.ValidationError("On object creation at least one maintainer needs to be under your control")
|
||||||
|
|
||||||
|
if cleaned_data['mnt_by'].count() > 5 or "mnt_lower" in self.fields and cleaned_data['mnt_lower'].count() > 5:
|
||||||
|
raise forms.ValidationError("Currently only 5 MNTs per object allowed. If you need more ask @ irc/rrequest and state your use case")
|
||||||
|
|
||||||
|
return cleaned_data
|
||||||
|
|
||||||
for mnt in cleaned_data['mnt_by']:
|
|
||||||
if mnt in mnts:
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
raise forms.ValidationError("On object creation at least one maintainer needs to be under your control")
|
|
||||||
|
|
||||||
class MntForm(WhoisObjectFormMixin, forms.ModelForm):
|
class MntForm(WhoisObjectFormMixin, forms.ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
|
@ -116,7 +116,7 @@ class MntdObject(WhoisObject):
|
||||||
class Meta:
|
class Meta:
|
||||||
abstract = True
|
abstract = True
|
||||||
|
|
||||||
mnt_by = models.ManyToManyField(Maintainer)
|
mnt_by = models.ManyToManyField(Maintainer, help_text="You can select multiple maintainers here")
|
||||||
|
|
||||||
def canEdit(self, user):
|
def canEdit(self, user):
|
||||||
if not hasattr(user, "maintainer_set"):
|
if not hasattr(user, "maintainer_set"):
|
||||||
|
|
Loading…
Reference in New Issue