🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Safari

SafariはAppleのウェブブラウザであり、Mac OS XとiOSのデフォルトのブラウザです。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2804閲覧

[HTML5]iOSから<input type="datetime-local">に入力すると「有効な値を入力してください」と弾かれてしまう

ttmone_

総合スコア6

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Safari

SafariはAppleのウェブブラウザであり、Mac OS XとiOSのデフォルトのブラウザです。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/09/10 21:22

Djangoを用いたウェブアプリケーションを開発しています。簡単なCRUDを扱うウェブアプリです。

コードはGitHubにあり、一応Herokuにデプロイ済みなので実際に試してみていただきたいです。

GitHub

いつでもエア実況

PC、Android端末からは投稿の保存ができたのですが、iPhoneから投稿を行うとDatetimeFieldに対してエラーが発生してしまいます。
イメージ説明

調べてみたところ、

  • Safariがdatetime-localの入力に対応していない
  • DjangoがSafariに対応していない
  • iOSがdatetime-localを扱う場合には初期値を与えなければいけない

という原因が挙げられていました。

How can I use <input type=datetime > and iOS Safari with Django?

ios – Mobile Safari(10.3.1)DateTime-Local“有効な値を入力してください”エラー

iPhone版Google Chromeでも投稿の保存ができなかったので、iOS特有の仕様なのでしょうか。

JavaScriptを用いた日時入力の方法(Datetime-pickerなど)もあるようですが、iPhoneの日時入力のフォームは扱いやすいので、可能ならばdatetime-localを扱いたいです。

python

1class CreateForm(forms.Form): 2 title = forms.CharField( 3 label='タイトル', 4 max_length=140, 5 help_text='Twitterハッシュタグの仕様上、?や!などの記号は使えません。Vtuberなどのアーカイブの場合、「配信タイトル_名前」を推奨します。' 6 ) 7""" 8以下が問題の箇所です。 9""" 10 start_time = forms.DateTimeField( 11 label='開始時刻', 12 widget=forms.DateTimeInput(attrs={"type": "datetime-local"}), 13 input_formats=['%Y-%m-%dT%H:%M'] 14 ) 15 episode = forms.IntegerField( 16 label='話数', 17 help_text='劇場作品やYouTube動画のときはとりあえず0話にしておいてください。空欄不可なので。(後々対応します)' 18 ) 19 comment = forms.CharField( 20 label='コメント', 21 widget=forms.Textarea(attrs={"max_length": 140}), 22 max_length=140, 23 help_text='「未視聴なのでネタバレNG」「一緒に考察しましょう」「15周目」「〇〇への愛を語りましょう」など書いておくといいかもしれません。' 24 'あと、見るプラットフォーム(Netflix, Prime Videoなど)を書いてあげると優しいかもです。' 25 ) 26

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Androidはあまり使わないのでわかりませんが、iPhone,iOSにおいて「Safari for iOSに対応しててChrome for iOSに対応していない」またはその逆は聞いたことがありません(FireFoxも同様)。

追記

iOSはすべてのブラウザにおいてSafariと同じWebkitを採用しているようです。
マイナビニュース
エキサイトニュース
リンク先がプログラミングと全く関係ないことは気にしないでください。

投稿2019/09/10 23:33

編集2019/09/10 23:42
kyoya0819

総合スコア10429

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kyoya0819

2019/09/10 23:36

ちなみにiPad6(iOS12.4.1,Safari12.2.1)でも同様の挙動が確認できました。
ttmone_

2019/09/11 00:25

ご回答ありがとうございます。つまり、iPhoneの利用しているレンダリングエンジンのWebkitがdatetime-localに対応していない。もしくは、僕のコードがWebkitに対応できていないという可能性が高いということですよね。レンダリングエンジンのことまで考えが至らなかったのでとても参考になります。
guest

0

自己解決

解決しました。レンダリングエンジンがWebkitの場合、<input type="datetime-local">に対して初期値を設定しなければならないようです。forms.pyを以下のように編集することで解決できました。strftime()メソッドでinput_formatsと形式を合わせてあげる必要があります。

python

1start_time = forms.DateTimeField( 2 label='開始時刻', 3 widget=forms.DateTimeInput(attrs={"type": "datetime-local", "value": timezone.datetime.now().strftime('%Y-%m-%dT%H:%M')}), 4 input_formats=['%Y-%m-%dT%H:%M'] 5 )

投稿2019/09/11 03:40

ttmone_

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問