мои формы.py выглядят так
class UserRegistration(UserCreationForm):
def __int__(self, *args, **kwargs):
super(UserRegistration, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_id = 'id-registrationForm'
self.helper.form_class = 'u-form--modern'
self.helper.form_method = 'post'
self.helper.form_action = 'submit_form'
self.helper.add_input(Submit('submit', 'Submit'))
class Meta:
model = User
fields = ['first_name',
'username',
'last_name',
'email',
'password1',
'password2']
и мои шаблоны выглядят так (я показываю только одно поле, потому что они более или менее похожи)
<form class = "js-validate mt-5" id = "id-registrationForm" method = "post">
<div class = "js-form-message mb-4">
<label class = "h6 small d-block text-uppercase "> Email address</label>
<div class = "js-focus-state input-group u-form">
<input type = "email" class = "form-control u-form__input" name = "email"
placeholder = "[email protected]">
</div>
</div>
К сожалению, мои навыки интерфейса близки к нулю, и я не мог понять, как использовать мой {{form.email}} внутри готовой формы начальной загрузки. Мне нужно это, чтобы отправить мою модель модели и зарегистрировать пользователя. Чтобы было понятно, я хочу, чтобы моя форма django выглядела как та, что внизу
Вы можете установить как ответ coderDude, или вы можете использовать Django crispy Forms и облегчить себе жизнь django-crispy-forms.readthedocs.io/en/latest
Это просто! Сначала установите bootstrap4:
pip install django-bootstrap4
Затем в вашем html файле загрузите bootstrap4 и вашу форму:
{% load bootstrap4 %}
<form method = "post">
{% csrf_token %}
{% bootstrap_form form %}
<input type = "submit" class = "btn btn-primary" value = "submit">
</form>
Я рекомендую вам изменить свою форму, чтобы она выглядела так:
from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserCreationForm
from django import forms
class UserCreateForm(UserCreationForm):
class Meta():
fields = ['username', 'email', 'password1', 'password2']
model = get_user_model()
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
Я действительно придумал решение с помощью django-widget-tweaks
{% load widget_tweaks %}
<div class = "js-form-message mb-4">
<div class = "js-focus-state input-group u-form u-form">
<label class = "h6 small d-block text-uppercase "> Email address</label>
<div class = "js-focus-state input-group u-form">
{{ form.email|add_class:"form-control u-form__input u-form" }}
</div>
</div>
По крайней мере, для меня настройки виджета django были намного более интуитивно понятными в том, как добавить мой собственный CSS в форму
мои формы.py
class UserRegistration(UserCreationForm):
email = forms.CharField(widget=forms.TextInput(attrs = {'placeholder': '[email protected]'}))
class Meta:
model = User
fields = ['first_name',
'username',
'last_name',
'email',
'password1',
'password2']
Возможный дубликат Определить класс css в формах django