Limit number of relationship in ManyToManyField in django
django, django-models, django-orm
Solution
All I needed was to create a model form:
class ShowroomsForm(forms.ModelForm):
class Meta:
model = Showrooms
def clean(self):
categories = self.cleaned_data.get('categories')
if categories and categories.count() > 3:
raise ValidationError('Maximum three categories are allowed.')
return self.cleaned_data
and added it to admin.py like below:
class ShowroomsAdmin(admin.ModelAdmin):
form = ShowroomsForm
admin.site.register(Showrooms, ShowroomsAdmin)
Problem
I am using ManyToMany relationship in my code in a scenario where i have showrooms and their categories. Now a showroom can fall into maximum three categories and i have to validate it while saving. Below is my code: ``` ##models.py class Showrooms(models.Model): name = models.CharField(max_length = 100) contact_person = models.CharField(max_length = 100) offer = models.TextField() categories = models.ManyToManyField(Categories, null=True, blank=True, related_name='categories') class Meta: db_table = 'showrooms' verbose_name_plural = "showrooms" class Categories(models.Model): category = models.CharField(max_length = 100) image = models.ImageField(upload_to = showroom_upload_path, null=True, blank=True) slug = models.SlugField(blank=True) class Meta: db_table = 'showroom_categories' verbose_name_plural = "categories" def __str__(self): return self.category ``` everything is working fine except i am not able to put validation on number of categories per showroom. And i am not using it in views but just wanna to do it in admin. Please help Thanks Edits Ok.. I have solved my issue. I created a form in forms.py ``` class ShowroomsForm(forms.ModelForm): class Meta: model = Showrooms def clean(self): categories = self.cleaned_data.get('categories') if categories and categories.count() > 3: raise ValidationError('Maximum three categories are allowed.') return self.cleaned_data ``` and added it to admin.py like below: ``` class ShowroomsAdmin(admin.ModelAdmin): form = ShowroomsForm admin.site.register(Showrooms, ShowroomsAdmin) ```