Ho due modelli:Convalida Django dati del modello per il calcolo della somma di più righe
class User(models.Model):
name = models.CharField(max_length=32)
class Referral(models.Model):
referring_user = models.ForeignKey(User, related_name="referrals")
referred_user = models.ForeignKey(User, related_name="referrers")
percentage = models.PositiveIntegerField()
L'idea è che ogni utente ha n
referenti, e dovrebbe avere almeno uno. Ogni referente ha un valore percentage
che dovrebbe aggiungere fino al 100% quando aggiunto agli altri referenti.
Quindi l'utente "Alice" potrebbe avere referenti "Bob" (50%) e "Cynthia" (50%) e l'utente "Donald" potrebbe avere un referente: "Erin" (100%).
Il problema che ho è con la convalida. C'è un modo (preferibilmente uno che funziona bene con l'amministratore di Django utilizzando admin.TabularInline
) che posso avere la convalida rifiutare il salvataggio di un User
se la somma di Refferrals != 100%
?
Idealmente, voglio che questo accada a livello di modulo/admin e non eseguendo l'override di User.save()
, ma a questo punto non so da dove iniziare. La maggior parte del codice di convalida di Django sembra essere atomico, e la convalida su più righe non è qualcosa che ho già fatto in Django.
Penso di aver fatto la stessa cosa prima, non riesco a ricordare tutto però. Penso che sia ancora necessario scavalcare il clean() dal livello User, ma questa volta devi tirare self.data piuttosto che self.cleaned_data. Solo per la cronaca, accedere a forms.data direttamente non è una buona pratica. –