Поскольку я новичок в Django, как я могу обновить поле формы c в django? когда я делаю {{ form.as_p }}
в шаблоне, он работает, но есть некоторые поля формы, которые не нужно показывать в другой форме, но некоторые это требует. поэтому я назвал их только необходимой заливкой для обновления в некоторых формах.
вот мой UpdateView:
class SettingsProfileView(UpdateView):
model = UserInfoModel
template_name = 'site/views/settingsprofile.html'
form_class = UserInfoForm
success_url = '/'
def get_object(self, queryset = None):
if queryset is None:
queryset = self.get_queryset()
return get_object_or_404(queryset, users_id = self.kwargs['pk'])
Это представление класса generi c фактически работает над {{ form.as_p }}
Но есть некоторые поля формы, которые я не хочу показывать в этой форме.
для тех, кто хочет видеть мои html шаблоны: вот оно ->
{% extends 'roots/site.html' %}
{% block content %}
<div class="card col-lg-12">
<div class="card-body">
<div class="card-title"><h3>Personal Information Settings</h3></div>
<form action="" method="post">
{% csrf_token %}
<div class="form-group">
{{ form.firstname.label_tag }}
{{ form.firstname }}
</div>
<div class="form-group">
{{ form.lastname.label_tag }}
{{ form.lastname }}
</div>
<h4>Birthdate: </h4>
<table>
<tr>
<td>{{ form.birthdate_month.label_tag }}</td>
<td>{{ form.birthdate_day.label_tag }}</td>
<td>{{ form.birthdate_year.label_tag }}</td>
</tr>
<tr>
<td>{{ form.birthdate_month }}</td>
<td>{{ form.birthdate_day }}</td>
<td>{{ form.birthdate_year }}</td>
</tr>
</table>
<div class="form-group">
{{ form.gender.label_tag }}
{{ form.gender }}
</div>
<button type="submit" class="btn btn-primary col-lg-12">Update</button>
</form>
</div>
</div>
{% endblock %}
поэтому для моей формы это:
class UserInfoForm(forms.ModelForm):
year = {}
days = {}
month = {
'': '---------',
'Jan': 'January', 'Feb': 'February', 'Mar': 'March',
'Apr': 'April', 'May': 'May', 'Jun': 'June', 'Jul': 'July',
'Aug': 'August', 'Sep': 'September', 'Oct': 'October',
'Nov': 'November', 'Dec': 'December'
}
gender = {
'Male': 'Male', 'Female': 'Female',
'Not Specify': 'Not Specify'
}
year[''] = '---------'
days[''] = '---------'
from datetime import datetime
for i in range((int(datetime.now().strftime('%Y'))), (1920 - 1), -1):
year[i] = i
for i in range(1, (31 + 1)):
if i < 10:
days[f'0{i}'] = f'0{i}'
else:
days[i] = i
password = forms.CharField(label = 'Password', widget = forms.PasswordInput(
attrs = {
'id': 'id_signup_password',
'class': 'form-control',
'placeholder': 'Password'
}
), required = True)
email = forms.EmailField(label = 'Email', widget = forms.EmailInput(
attrs = {
'id': 'id_signup_email',
'class': 'form-control',
'placeholder': 'Email',
'autocomplete': 'off'
}
), required = True)
firstname = forms.CharField(label = 'Firstname', widget = forms.TextInput(
attrs = {
'id': 'id_signup_firstname',
'class': 'form-control',
'placeholder': 'Firstname',
'autocomplete': 'off'
}
), required = True)
lastname = forms.CharField(label = 'Lastname', widget = forms.TextInput(
attrs = {
'id': 'id_signup_lastname',
'class': 'form-control',
'placeholder': 'Lastname',
'autocomplete': 'off'
}
), required = True)
gender = forms.ChoiceField(label = 'Gender', widget = forms.Select(
attrs = {
'id': 'id_signup_gender',
'class': 'form-control',
}
), choices = list(gender.items()), required = False)
birthdate_year = forms.ChoiceField(label = 'Year', widget = forms.Select(
attrs = {
'id': 'id_signup_birthyear',
'class': 'form-control',
}
), choices = list(year.items()), required = True)
birthdate_day = forms.ChoiceField(label = 'Day', widget = forms.Select(
attrs = {
'id': 'id_signup_day',
'class': 'form-control',
}
), choices = list(days.items()), required = True)
birthdate_month = forms.ChoiceField(label = 'Month', widget = forms.Select(
attrs = {
'id': 'id_signup_month',
'class': 'form-control',
}
), choices = list(month.items()), required = True)
class Meta:
model = UserInfoModel
fields = ['firstname', 'lastname', 'gender', 'birthdate_year', 'birthdate_month', 'birthdate_day']
Я просто не хочу использовать / показывать email
и password
, когда пользователь обновит там свою личную информацию.