рд╣реИрд▓реЛ, рдореИрдВрдиреЗ рдЕрдЬрдЧрд░> = 3.5 рдореЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░рд╕реЗрдЯ-рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд░реНрдЧ рдХреА рддрд╛рддреНрдХрд╛рд▓рд┐рдХрддрд╛ рдХреЗ рджреМрд░рд╛рди рдПрдХ рддреНрд░реБрдЯрд┐ рдкрдХрдбрд╝реАред 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
рдореЗрд░реЗ рдлрд╝рд┐рд▓реНрдЯрд░рд╕реЗрдЯ рд╡рд░реНрдЧ рдХрд╛ рдЙрджрд╛рд╣рд░рдгред рдлреАрд▓реНрдбреНрд╕ рдбреЗрдЯрдЯрд╛рдЗрдордлрд┐рд▓реНрдЯрд░ рдФрд░ рдХреЙрдорд╛рд╕реЗрдкрд░реЗрдЯреЗрдб рдЪрд╛рд░рдлрд┐рд▓реНрдЯрд░ рдХрд╕реНрдЯрдо рд╣реИрдВ:
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
base_filters
рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ odict_items
ред рдХреНрдпрд╛ рдХреБрдЫ base_filters
рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд░рд╣рд╛ рд╣реИ?рдорд╛рдл рдХрд░рдирд╛ рдореЗрд░рд╛ рдмреБрд░рд╛)ред рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рд╣реИрдВ:
category = ChoiceField(choices=CATEGORIES.items())
рдЬрдм copy.deepcopy() рдХреЛ self.base_fields рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рддреЛ рдпрд╣ рдлрд╝реАрд▓реНрдб рдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдЪреБрдирдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ dict_items рдЯрд╛рдЗрдк рд╣реЛрддрд╛ рд╣реИред
рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЕрднреА рднреА рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╣рд▓ рдХрд┐рдпрд╛:
list(CATEGORIES.items())
[рдкрд╛рдпрдерди рей.реорел рдФрд░ Django рей.рез.рез рдХреЗ рд╕рд╛рде] рдЗрд╕реА рддрд░рд╣, рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдореЗрд░реА рд╕реВрдЪреА рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдорд┐рд▓ рд░рд╣реА рд╣реИ:
TypeError: cannot pickle 'dict_items' object
рдмреИрдХрдЯреНрд░реИрдХ рдореЗрдВ рдХреБрдЫ рднреА рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рдирд╣реАрдВ рд╣реИ:
https://pastebin.com/S4xn8zpT
рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдореЗрд░реЗ рдореЙрдбрд▓ рдореЗрдВ choices
рд╕реВрдЪреА рдХреЛ CharField
рдореЗрдВ рдЬреЛрдбрд╝ рд░рд╣реА рдереА:
рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ:
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
s рдкрд░ рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЕрдиреНрдп choices
рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ record_request_status
рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛ рднреА рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред
рдпрд╣ рдХрд╛рдо:
record_request_status = models.CharField(max_length=4, null=True, choices=list(RECORD_REQUEST_STATUS))
рдХреНрдпрд╛ рдХреЛрдИ рд╕рдордЭрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ?
@paulschreiber рдЖрдкрдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ RECORD_REQUEST_STATUS
рдХреЗрд╡рд▓ рдПрдХ рдЖрджрд┐рдо рд╕реВрдЪреА рдпрд╛ Tuple рдХреЗ рдмрдЬрд╛рдп dict_items
рдкреНрд░рдХрд╛рд░ рджреЗрддрд╛ рд╣реИ .. dict_items
рдЕрдЪрд╛рд░ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬреНрдЮрд╛рдд рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИ рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЙрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдлреЗрдВрдХрддрд╛ рд╣реИ . dict_items
рдореЗрдВ рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЧрд┐рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рддрд░реАрдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рд╣реИрдВ, list
рд╡рд┐рдзрд┐ рдЗрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдо рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╡рд┐рдХрд▓реНрдк рдЕрдВрддрддрдГ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдЙрдореНрдореАрдж рд╣реИ, рдпрд╣ рдЗрд╕реЗ рдЕрдЪреНрдЫреЗ рд░реВрдк рдореЗрдВ рд╕рдордЭрд╛рддрд╛ рд╣реИ, рдореБрдЭреЗ рдЗрд╕реЗ рдЖрдЦрд┐рд░реА рдмрд╛рд░ рджреЗрдЦреЗ рд╣реБрдП рдХреБрдЫ рд╕рд╛рд▓ рд╣реЛ рдЧрдП рд╣реИрдВред
@ рд░рдпрд╛рдирдм 58 рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдХреНрдпреЛрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд╡рд┐рднрд┐рдиреНрди рдореЙрдбрд▓реЛрдВ рдореЗрдВ рдЕрдиреНрдп рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдПрдХ JSON рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рд╣реИред
@paulschreiber рдореБрдЭреЗ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рдЙрдбрд╝рд╛рдирд╛ рднреА рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рдХреБрдЫ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рдИрдореЗрд▓ рд╢реВрдЯ рдХрд░реВрдВрдЧрд╛ред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЕрднреА рднреА рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╣рд▓ рдХрд┐рдпрд╛: