Czy w środowisku Python Eve możliwe jest spełnienie warunku, który sprawdza, czy kombinacja dwóch pól jest unikalna?
Na przykład poniższa definicja ogranicza tylko Imię i nazwisko być unikalnym dla przedmiotów w zasobie.
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
}
}
Zamiast tego istnieje sposób na ograniczenie Imię i nazwisko połączenie jest wyjątkowe?
Czy istnieje sposób na zaimplementowanie CustomValidator do tego?
Odpowiedzi:
1 dla odpowiedzi № 1Prawdopodobnie możesz osiągnąć to, co chcesz, przeciążając _validate_unique
i wdrożenie tam niestandardowej logiki, wykorzystując self.document
w celu pobrania innej wartości pola.
Jednak od tego czasu _validate_unique
jest wywoływane dla każdego unikatowego pola, w przeciwnym razie wykonasz swoje własne sprawdzanie poprawności dwukrotnie, raz dla firstname
a następnie dla lastname
. Niezbyt pożądane. Oczywiście, że nie ma wyjścia fullname
pole, ale myślę, że to nie jest opcja w twoim przypadku.
Zastanawiałeś się, czy nie wybrać nieco innego projektu? Coś jak:
{"name": {"first": "John", "last": "Doe"}}
Wszystko, czego potrzebujesz, to upewnij się name
jest wymagane i wyjątkowy:
{
"name": {
"type":"dict",
"required": True,
"unique": True,
"schema": {
"first": {"type": "string"},
"last": {"type": "string"}
}
}
}