Вы можете просто поймать исключение:
order_by = self.request.GET.get('order_by', None) # item_typea
try:
queryset = Item.objects.order_by(order_by)
# evaluate the queryset - that's when the exception will be thrown
except FieldError:
# deal with error
Да, ОС автоматически закрывает предыдущий сокет после завершения старого процесса. Причина, по которой вы не можете прослушивать один и тот же порт сразу же, заключается в том, что сокет, хотя он и закрыт, остается в состоянии 2MSL в течение некоторого времени (обычно несколько минут). ОС автоматически переводит старый сокет из этого состояния по истечении времени ожидания.
Сокет считается закрытым, когда программа, использующая его, умирает. Это многое обрабатывается ОС, и ОС откажется принимать любое дальнейшее сообщение из мертвого разговора. Однако, если сокет был неожиданно закрыт, компьютер на другом конце может не знать, что разговор окончен, и все еще может пытаться установить связь.
Именно поэтому в спецификации TCP предусмотрен период ожидания до того же номера порта можно использовать повторно. Поскольку теоретически, однако маловероятно, пакет из старого диалога может иметь возможность прибыть с соответствующим IP-адресом, номерами портов и порядковыми номерами, так что принимающий сервер по ошибке вставит его в неправильный поток TCP случайно.
Параметр SO_REUSEADDR
отменяет это поведение, что позволяет сразу же повторно использовать порт. По сути, вы говорите: «Я понимаю риски и хотел бы в любом случае использовать порт».