私は自分の「バグ」を調べたところ、Django 1.9で、CharFieldsがデフォルトでスペースを削除するという新機能であることが判明しました: https://docs.djangoproject.com/en /1.9/ref/forms/fields/#Django.forms.CharField.strip
テキストフィールドTextFieldに適用するのと同じ継ぎ目。
だから私はDjangoが突然以前とは異なる動作をする理由を見つけましたが、自動生成された管理フォームの以前のデフォルトを復元する簡単な方法はありますか?
管理者から自動生成されたフォームを使用している間は、スペースを削除したくありません。それはまだ可能ですか?
Text/charフィールドを探していて、空白を削除したくない場合は、フォームのコンストラクターメソッドでstrip = Falseを設定してから、管理者でフォームを使用できます。
class YourForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(YourForm, self).__init__(*args, **kwargs)
self.fields['myfield'].strip = False
class Meta:
model = YourModel
fields = "__all__"
その後、admin.pyファイルでform=YourForm
を指定することにより、管理者でこのフォームを使用できます。
これを使用してみてください:
# fields.py
from Django.db.models import TextField
class NonStrippingTextField(TextField):
"""A TextField that does not strip whitespace at the beginning/end of
it's value. Might be important for markup/code."""
def formfield(self, **kwargs):
kwargs['strip'] = False
return super(NonStrippingTextField, self).formfield(**kwargs)
そしてあなたのモデルでは:
class MyModel(models.Model):
# ...
my_field = NonStrippingTextField()
strip=False
charFieldsのモデルフィールド。
Django TextFieldはこのストリッピング機能をサポートしていないため、自分で行う必要があります。ストリップ法を使用できます。
abc.strip()
これを処理する最良の方法は、次のようなカスタム管理フォームを作成することです。
class CustomForm(forms.ModelForm):
my_field = forms.CharField(strip=False, widget=forms.Textarea)
class Meta:
model = MyModel
exclude = []
これにより、my_fieldだけが削除されていないバージョンで上書きされたデフォルトのフォームが作成されます。 )もちろん、これは対応する管理者で設定する必要があります。誰かがさらに単純なバージョンを知っているなら。教えてください!
Django-restモデルシリアライザーでこの問題が発生していました。テキストフィールドのデータから空白が削除されました。したがって、シリアライザーレベルでこれを実行しようとしている場合は、CharFieldシリアライザーで空白パラメーターを指定できます。これがソースコードです signature 。
そしてここに残りがあります CharField のドキュメント
class SomeSerializer(serializers.ModelSerializer):
content = serializers.CharField(trim_whitespace=False)
class Meta:
model = YourModel
fields = ["content"]