μλ νμΈμ, python>=3.5μμ FilterSet νμ ν΄λμ€λ₯Ό μΈμ€ν΄μ€ννλ λμ μ€λ₯κ° λ°μνμ΅λλ€. 3.4μμλ λͺ¨λ κ²μ΄ μ μμ μΌλ‘ μλν©λλ€.
File "/home/dan/venvs/notes3.5/lib/python3.5/site-packages/django_filters/filterset.py" in __init__
291. self.filters = copy.deepcopy(self.base_filters)
File "/home/dan/venvs/notes3.5/lib/python3.5/copy.py" in deepcopy
182. y = _reconstruct(x, rv, 1, memo)
File "/home/dan/venvs/notes3.5/lib/python3.5/copy.py" in _reconstruct
320. value = deepcopy(value, memo)
File "/home/dan/venvs/notes3.5/lib/python3.5/copy.py" in deepcopy
182. y = _reconstruct(x, rv, 1, memo)
File "/home/dan/venvs/notes3.5/lib/python3.5/copy.py" in _reconstruct
297. state = deepcopy(state, memo)
File "/home/dan/venvs/notes3.5/lib/python3.5/copy.py" in deepcopy
155. y = copier(x, memo)
File "/home/dan/venvs/notes3.5/lib/python3.5/copy.py" in _deepcopy_dict
243. y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/home/dan/venvs/notes3.5/lib/python3.5/copy.py" in deepcopy
155. y = copier(x, memo)
File "/home/dan/venvs/notes3.5/lib/python3.5/copy.py" in _deepcopy_dict
243. y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/home/dan/venvs/notes3.5/lib/python3.5/copy.py" in deepcopy
174. rv = reductor(4)
Exception Type: TypeError at /notes/
Exception Value: can't pickle odict_items objects
λ΄ FilterSet ν΄λμ€μ μ. DateTimeFIlter λ° CommaSeparatedCharFilter νλλ μ¬μ©μ μ μμ λλ€.
class NoteListFilterset(django_filters.FilterSet):
strict = STRICTNESS.RAISE_VALIDATION_ERROR
keywords = CommaSeparatedCharFilter(name='keyword', lookup_expr='in')
datetime_from = DateTimeFilter(name='datetime', lookup_expr='gte')
datetime_to = DateTimeFilter(name='datetime', lookup_expr='lte')
get_hidden = django_filters.MethodFilter(method='filter_by_get_hidden')
μλ νμΈμ @dangusevμ λλ€. μ΄κΈ° λ°μμ λ§μ΄ μλλ€λ κ²μ λλ€. λ κ°μ§ μκ°:
base_filters
ν΄μΌ OrderedDict
κ° μλ odict_items
. base_filters
μ¬μ μνλ κ²μ΄ μμ΅λκΉ?λ―Έμν©λλ€ μ μλͺ»μ λλ€). λ€μκ³Ό κ°μ μ½λκ° λ§μ΄ μμ΅λλ€.
category = ChoiceField(choices=CATEGORIES.items())
copy.deepcopy()κ° self.base_fieldsμμ νΈμΆλλ©΄ μ ν νλͺ©μ dict_items μ νμ΄ μκΈ° λλ¬Έμ νλ μ ν νλͺ©μ νΌν΄νλ €κ³ μλνκ³ μ€ν¨ν©λλ€.
μ¬μ νμ΄ λ¬Έμ κ° λ°μνλ μ¬λλ€μ μν΄ λ€μκ³Ό κ°μ΄ ν΄κ²°νμ΅λλ€.
list(CATEGORIES.items())
[Python 3.85 λ° Django 3.1.1 μ¬μ©] λ§μ°¬κ°μ§λ‘ λͺ©λ‘ 보기 μ€ νλμμ μ΄ μ€λ₯κ° λ°μν©λλ€.
TypeError: cannot pickle 'dict_items' object
λ΄ μ½λμλ μμΆμ μ μ무 κ²λ μμ΅λλ€.
https://pastebin.com/S4xn8zpT
λ¬Έμ λ λ΄ λͺ¨λΈμ CharField
μ choices
λͺ©λ‘μ μΆκ°νλ κ²μ΄μμ΅λλ€.
μ€ν¨:
record_request_status = models.CharField(max_length=4, null=True, choices=RECORD_REQUEST_STATUS)
μ μ μλ:
record_request_status = models.CharField(max_length=4, null=True)
RECORD_REQUEST_STATUS
λ μ¬μ μ
λλ€.
with open('case-manager/src/json_fixtures/record_request_status.json') as json_file:
RECORD_REQUEST_STATUS = json.load(json_file).items()
λμΌν choices
λͺ©λ‘μ λͺ¨λΈμ λ€λ₯Έ CharField
ν λΉνλ©΄ μ μλν©λλ€.
λ€λ₯Έ choices
λͺ©λ‘μ record_request_status
ν λΉνλ κ²λ μ€ν¨ν©λλ€.
μ΄κ²μ μλν©λλ€:
record_request_status = models.CharField(max_length=4, null=True, choices=list(RECORD_REQUEST_STATUS))
λκ΅°κ° λ¬΄μ¨ μΌμ΄ μΌμ΄λκ³ μλμ§ μ€λͺ ν μ μμ΅λκΉ?
κ·νμ μν©μμ @paulschreiber RECORD_REQUEST_STATUS
λ κΈ°λ³Έ List λλ Tuple λμ dict_items
μ νμ λ°νν©λλ€. dict_items
λ λ³νν νΌν΄μ λν΄ μλ €μ§ μ νμ΄ μλλ―λ‘ ν΄λΉ μ€λ₯κ° λ°μν©λλ€. . dict_items
μλ λ°λ³΅μλ‘ κ³μ°νκΈ° μν΄ κ΅¬νλ μ μ ν λ©μλκ° μμΌλ―λ‘ list
λ©μλκ° λ³νμ μλνλ―λ‘ μ ν νλͺ©μ΄ μ λ¬νλ κ²μ λ§μΉ¨λ΄ λ°μλ€μΌ μ μμ΅λλ€.
λ°λΌκ±΄λ, κ·Έκ²μ΄ μ’μ ννλ‘ μ€λͺ λ©λλ€. λ΄κ° μ΄κ²μ λ§μ§λ§μΌλ‘ λ³Έ μ§ λͺ λ μ΄ μ§λ¬μ΅λλ€.
@Ryanb58 μ΄ νλμμλ§ μ€ν¨νλ μ΄μ λ₯Ό μ΄ν΄νμ§
@paulschreiber λ¬Έμ μ κ΄μ¬μ΄ μμ§λ§ μ΄ μ€λ λλ₯Ό νννκ³ μΆμ§λ μμ΅λλ€. μ΄ νΉμ νλ‘μ νΈμ λ²μλ₯Ό λ²μ΄λ κ² κ°μ΅λλ€. μ΄λ©μΌμ 보λ΄λλ¦¬κ² μ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
μ¬μ νμ΄ λ¬Έμ κ° λ°μνλ μ¬λλ€μ μν΄ λ€μκ³Ό κ°μ΄ ν΄κ²°νμ΅λλ€.