Allow only 5 maintainers, one needs to be your own + help text
This commit is contained in:
		
							parent
							
								
									f25d07ccf7
								
							
						
					
					
						commit
						e9aeca1f32
					
				| 
						 | 
				
			
			@ -60,22 +60,18 @@ class MntFormMixin(object):
 | 
			
		|||
		if not hasattr(self, "_create"):
 | 
			
		||||
			self._create = not (instance and instance.pk)
 | 
			
		||||
 | 
			
		||||
		mntWhens = [When(auth=self._user, then=2)]
 | 
			
		||||
		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")
 | 
			
		||||
		mntQs = orderQueryset(Maintainer.objects.all(), Q(auth=self._user), Q(pk__in=instance.mnt_by.all()) if not self._create else None)
 | 
			
		||||
		self.fields["mnt_by"].queryset = mntQs
 | 
			
		||||
 | 
			
		||||
		if "mnt_lower" in self.fields:
 | 
			
		||||
			self.fields["mnt_lower"].queryset = mntQs
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	def clean(self):
 | 
			
		||||
		cleaned_data = super(MntFormMixin, self).clean()
 | 
			
		||||
 | 
			
		||||
		if not self.errors and self._create:
 | 
			
		||||
		if not self.errors:
 | 
			
		||||
			if self._create:
 | 
			
		||||
				# at least one own mnt on creation
 | 
			
		||||
				mnts = self._user.maintainer_set.all()
 | 
			
		||||
 | 
			
		||||
				for mnt in cleaned_data['mnt_by']:
 | 
			
		||||
| 
						 | 
				
			
			@ -84,6 +80,12 @@ class MntFormMixin(object):
 | 
			
		|||
				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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class MntForm(WhoisObjectFormMixin, forms.ModelForm):
 | 
			
		||||
	class Meta:
 | 
			
		||||
		model = Maintainer
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -116,7 +116,7 @@ class MntdObject(WhoisObject):
 | 
			
		|||
	class Meta:
 | 
			
		||||
		abstract = True
 | 
			
		||||
 | 
			
		||||
	mnt_by = models.ManyToManyField(Maintainer)
 | 
			
		||||
	mnt_by = models.ManyToManyField(Maintainer, help_text="You can select multiple maintainers here")
 | 
			
		||||
 | 
			
		||||
	def canEdit(self, user):
 | 
			
		||||
		if not hasattr(user, "maintainer_set"):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue