|
28 | 28 | "UUIDField",
|
29 | 29 | "DateField", "Date32Field", "DateTimeField", "DateTime64Field",
|
30 | 30 | "Enum8Field", "Enum16Field", "EnumField",
|
31 |
| - "ArrayField", "TupleField", "MapField", |
32 | 31 | "IPv4Field", "IPv6Field", "GenericIPAddressField",
|
| 32 | + "ArrayField", "TupleField", "MapField", |
33 | 33 | ]
|
34 | 34 |
|
35 | 35 |
|
@@ -256,6 +256,11 @@ class EnumField(FieldMixin, fields.Field):
|
256 | 256 | MIN_INT = -32768
|
257 | 257 | MAX_INT = 32767
|
258 | 258 |
|
| 259 | + def __init__(self, *args, return_int=True, **kwargs): |
| 260 | + """Use return_int to control whether to get an int or str value when querying from the database.""" |
| 261 | + self.return_int = return_int |
| 262 | + super().__init__(*args, **kwargs) |
| 263 | + |
259 | 264 | def _check_choices(self):
|
260 | 265 | """Note: although clickhouse support arbitrary bytes in Enum name,
|
261 | 266 | but clickhouse-driver 0.2.5 will raise UnicodeDecodeError when execute query."""
|
@@ -343,7 +348,8 @@ def get_prep_value(self, value):
|
343 | 348 | return value
|
344 | 349 |
|
345 | 350 | def from_db_value(self, value, expression, connection):
|
346 |
| - if value is None: |
| 351 | + """Clickhouse return enum name for Enum column.""" |
| 352 | + if value is None or not self.return_int: |
347 | 353 | return value
|
348 | 354 | return self._name_value_map[value]
|
349 | 355 |
|
|
0 commit comments