Проверка уникальности модели "многие ко многим" по внешнему ключу поля модели

У меня есть 3 модели:

class Citizenship(models.Model):
    name = models.CharField()

class Destination(models.Model):
    name = models.CharField()

class RestrictionGroup(models.Model):
    destination = models.ForeignKey(Destination, on_delete=models.CASCADE)
    citizenship = models.ManyToManyField(Citizenship)

Я хочу, чтобы мое гражданство было уникальным на основе связанного пункта назначения. Если моим пунктом назначения является Англия, и если у меня есть 5 групп ограничений, каждая группа ограничений, связанная с пунктом назначения, должна иметь уникальное гражданство.

например, enter image description here

на этом изображении Греция продублирована, но мне нужны уникальные страны для страны назначения.

Итак, как можно проверить это и вернуть дружественное сообщение об ошибке?

любая помощь приветствуется, заранее спасибо.

Я решил свою проблему с методом save_formset и поделюсь своим кодом, если в будущем он кому-нибудь понадобится.

Сначала я собираю все значения гражданства, принадлежащие назначению, после чего использую метод set() и сравниваю len(list_data) с len(set_data), если они не совпадают, значит, введено дублированное значение.

   def save_formset(self, request, form, formset, change):
   instances = formset.save(commit=False)

   citizenship_list = []
   for dep in formset.cleaned_data:
       if dep.get('citizenship'):
           for country in dep.get('citizenship'):
               citizenship_list.append(country.name)

   citizenship_set = set(citizenship_list)
   if len(citizenship_list) != len(citizenship_set):
       self.message_user(request, message="Duplicate Citizenship value", level=messages.ERROR)
   else:
       for obj in formset.deleted_objects:
           obj.delete()
       for instance in instances:
           instance.user = request.user
           instance.save()
       formset.save_m2m()
Вернуться на верх