''' Superuser = admin password = idem à BD ''' from django.contrib import admin from django.forms import BaseModelForm, BaseInlineFormSet from .models import * from django.core.exceptions import ValidationError class MainInlineForm(BaseModelForm): model = Main fields = ('numero', 'pique', 'coeur', 'carreau', 'trefle') class MainInlineFormSet(BaseInlineFormSet): def carte_doublon(self, cartes): if cartes is None: return cartes l = [] for c in cartes: v = valeur_carte(c) l.append((v, c)) l = sorted(l, reverse=True) s = '' for (v, c) in l: s += c sd = '' c0 = None for c in s: if c == c0: sd += c c0 = c return sd def clean(self): super().clean() if self.errors: return pique = '' for form in self.forms: pique += form.cleaned_data.get('pique') doublons = self.carte_doublon(pique) if len(doublons) > 1: raise ValidationError("'{}' de pique sont en double dans les différentes mains de la donne". format(doublons)) elif len(doublons) == 1: raise ValidationError("'{}' de pique est en double dans les différentes mains de la donne". format(doublons)) class MainInline(admin.StackedInline): model = Main fields = ('numero', 'pique', 'coeur', 'carreau', 'trefle') extra = 2 max_num = 4 form = MainInlineForm formset = MainInlineFormSet class DonneAdmin(admin.ModelAdmin): exclude = ('nb_aleatoire', 'numero') list_filter = ('chapitre',) inlines = (MainInline,) class MainAdmin(admin.ModelAdmin): exclude = ('pointsh',) ordering = ('numero',) def valeur_carte(c): if c == 'A': v = 14 elif c == 'R': v = 13 elif c == 'D': v = 12 elif c == 'V': v = 11 elif c == 'X': v = 10 else: v = ord(c) - 48 return v admin.site.register(Donne, DonneAdmin) admin.site.register(Main, MainAdmin)