|
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