diff --git a/books/views.py b/books/views.py index 66765291..33246ca3 100644 --- a/books/views.py +++ b/books/views.py @@ -567,6 +567,7 @@ def click_to_scrape(request): msg = _("ISBN与现有图书重复") else: msg = _("爬取数据失败😫") + logger.error(str(form.errors)) return render(request, 'common/error.html', {'msg': msg}) else: return HttpResponseBadRequest() diff --git a/common/forms.py b/common/forms.py index 953680e1..1ae0e2a6 100644 --- a/common/forms.py +++ b/common/forms.py @@ -37,9 +37,16 @@ class JSONField(postgres.JSONField): if not value: return None json = {} - pairs = eval(value) - for pair in pairs: - json = {**json, **pair} + if isinstance(value, dict): + json = value + else: + pairs = eval(value) + if isinstance(pairs, dict): + json = pairs + else: + # list or tuple + for pair in pairs: + json = {**json, **pair} return super().to_python(json) diff --git a/common/scraper.py b/common/scraper.py index 9963d6a6..a3c72236 100644 --- a/common/scraper.py +++ b/common/scraper.py @@ -297,8 +297,13 @@ def scrape_douban_movie(url): if showtime_elem: showtime = [] for st in showtime_elem: - time = st.split('(')[0] - region = st.split('(')[1][0:-1] + parts = st.split('(') + if len(parts) == 1: + time = st.split('(')[0] + region = '' + else: + time = st.split('(')[0] + region = st.split('(')[1][0:-1] showtime.append({time: region}) else: showtime = None diff --git a/common/static/js/key_value_input.js b/common/static/js/key_value_input.js index aa7abd55..29fc9dda 100644 --- a/common/static/js/key_value_input.js +++ b/common/static/js/key_value_input.js @@ -55,8 +55,18 @@ function keyValueInput(valueKeyWidget, hiddenInput) { finalValue.push(JSON.stringify(json)) }); hiddenInput.val(finalValue.toString()); - } else { - + } else if(keys.length - values.length == 1) { + let finalValue = []; + keys.forEach(function (key, i) { + let json = new Object; + if (i < keys.length - 1) { + json[key] = values[i]; + } else { + json[key] = '' + } + finalValue.push(JSON.stringify(json)) + }); + hiddenInput.val(finalValue.toString()); } }); } diff --git a/movies/models.py b/movies/models.py index b9d37182..30d4bb05 100644 --- a/movies/models.py +++ b/movies/models.py @@ -143,7 +143,7 @@ class Movie(Resource): ) year = models.PositiveIntegerField(null=True, blank=True) - duration = models.CharField(blank=True, default='', max_length=100) + duration = models.CharField(blank=True, default='', max_length=200) cover = models.ImageField(_("poster"), upload_to=movie_cover_path, default=DEFAULT_MOVIE_IMAGE, blank=True) diff --git a/movies/templates/movies/detail.html b/movies/templates/movies/detail.html index df26ce85..f2b080da 100644 --- a/movies/templates/movies/detail.html +++ b/movies/templates/movies/detail.html @@ -172,7 +172,7 @@
{% if movie.showtime %}{% trans '上映时间:' %} {% for showtime in movie.showtime %} {% for time, region in showtime.items %} - {{ time }}({{ region }}) + {{ time }}{% if region != '' %}({{ region }}){% endif %} {% endfor %} {% if not forloop.last %} / {% endif %} {% endfor %} diff --git a/movies/views.py b/movies/views.py index 16941fed..470716a8 100644 --- a/movies/views.py +++ b/movies/views.py @@ -571,6 +571,7 @@ def click_to_scrape(request): return redirect(reverse('movies:retrieve', args=[form.instance.id])) else: msg = _("爬取数据失败😫") + logger.error(str(form.errors)) return render(request, 'common/error.html', {'msg': msg}) else: return HttpResponseBadRequest()