私はDjangoの2つのスクープから練習していますが、私はCreateViewのform_classに問題があります。 CreateViewでフィールドを使用している場合はモデルを保存していますが、form_classを使用している場合は保存もリダイレクトもしません。Django CreateView with form_class
私はバリデータを練習するためにform_classを使用しています。
views.py
class FlavorCreateView(LoginRequiredMixin, CreateView):
model = Flavor
success_url = '/flavors/list/'
template_name = 'flavor_create.html'
success_msg = 'Flavor created.'
form_class = FlavorForm
# fields = ['title', 'slug', 'scoops_remaining']
def form_valid(self, form):
form.instance.created_by = self.request.user
return super(FlavorCreateView, self).form_valid(form)
forms.py
class FlavorForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(FlavorForm, self).__init__(*args, **kwargs)
self.fields['title'].validators.append(validate_tasty)
self.fields['slug'].validators.append(validate_tasty)
class Meta:
model = Flavor
fields = ['title', 'slug', 'scoops_remaining']
validators.py
def validate_tasty(value):
"""
Raise a ValidationError if the value doesn't start with the word 'Tasty'.
"""
if not value.startswith('Tasty'):
msg = 'Must start with Tasty'
raise ValidationError(msg)
flavor_create.html
{% extends 'base_flavor.html' %}
{% block content %}
<form action="" method="POST">{% csrf_token %}
<p style="color: red;">{{ form.title.errors.as_text }}</p>
{% for field in form %}
<p>{{ field.label }}: {{ field }}</p>
{% endfor %}
<button type="Submit">Salveaza</button>
</form>
<a href="{% url 'flavors:list_flavor' %}">Return home</a>
{% endblock %}
ビューでsave()が不足している可能性があります。 – harmaahylje