/ / Combinazione di due campi per essere unici in Python Eve - python, eve

Combinazione di due campi per essere unici in Python Eve - python, eve

Nel framework Python Eve, è possibile avere una condizione che controlli la combinazione di due campi per essere univoci?

Ad esempio la seguente definizione limita solo nome di battesimo e cognome essere unico per gli articoli nella risorsa.

people = {
# "title" tag used in item links.
"item_title": "person",
"schema": {
"firstname": {
"type": "string",
"required": True,
"unique": True
},
"lastname": {
"type": "string",
"required": True,
"unique": True
}
}

Invece, c'è un modo per limitare nome di battesimo e cognome combinazione per essere unica?

O c'è un modo per implementare un CustomValidator per questo?

risposte:

1 per risposta № 1

Probabilmente puoi ottenere quello che vuoi sovraccaricando il _validate_unique e implementando la logica personalizzata lì, approfittando di self.document per recuperare l'altro valore di campo.

Tuttavia, da allora _validate_unique viene chiamato per ogni campo unico, si finirebbe per eseguire la convalida personalizzata due volte, una volta per firstname e poi per lastname. Non proprio desiderabile. Ovviamente la via d'uscita di wasy si sta configurando fullname campo, ma immagino che "non è un'opzione nel tuo caso.

Hai mai pensato di optare per un design leggermente diverso? Qualcosa di simile a:

{"name": {"first": "John", "last": "Doe"}}

Allora tutto ciò che ti serve è assicurarti che name è obbligatorio e unico:

{
"name": {
"type":"dict",
"required": True,
"unique": True,
"schema": {
"first": {"type": "string"},
"last": {"type": "string"}
}
}
}