Ho un modulo in cui convalidare nel metodo clean se esiste già un oggetto ProjectMembership, che ha gli stessi valori per progetto e membro . Ciò è dovuto al fatto che nel modello ProjectMembership ho definito un vincolo unique_together per project e member. Questo funziona davvero bene.django - come verificare in un metodo pulito di un modulo se si tratta di un inserto o di un aggiornamento
class ProjectMembershipForm(forms.ModelForm):
project = forms.ModelChoiceField(Project.objects, widget=HiddenInput())
class Meta:
model = ProjectMembership
def clean(self):
cleaned_data = self.cleaned_data
project = cleaned_data.get("project")
member = cleaned_data.get("member")
print ProjectMembership.objects.filter(project=project, member=member).count()
if ProjectMembership.objects.filter(project=project, member=member).count() > 0:
del cleaned_data["project"]
del cleaned_data["member"]
raise forms.ValidationError('The user "%s" is already part of the project team for project "%s".' % (member, project))
return cleaned_data
Ma ora mi sto chiedendo come posso giudicare nel metodo pulito se l'utente tenta di creare una nuova relazione o aggiornare una relazione. Perché con questo metodo pulito non è possibile fare un aggiornamento, poiché restituisce il messaggio di errore che la voce esiste già.
Hai trovato una soluzione a questo? Sto cercando di fare lo stesso da solo, ma non riesco a trovare una soluzione. – espenhogbakk
No non ha trovato una soluzione. Ora uso solo due moduli, uno per l'aggiornamento e uno per l'inserimento. Nel modulo di aggiornamento è necessario disabilitare i campi univoci insieme per assicurarsi di non violare questo vincolo. Questo approccio ha lo svantaggio che non è possibile aggiornare i campi che hanno i vincoli unici univoci. –