Как обновить данные в поле формы Speci c в UpdateView Django - PullRequest
0 голосов
/ 08 апреля 2020

Поскольку я новичок в 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, когда пользователь обновит там свою личную информацию.

1 Ответ

0 голосов
/ 08 апреля 2020

В вашем UserInfoForm вы можете указать с полями, какие поля вы хотите. Например:

class UserInfoForm(models.ModelForm):
    class Meta:
        model = UserInfoModel
        <b>fields = ('first_name', 'last_name', 'birthdate', 'gender')</b>

Таким образом, другие поля не будут определены. Кроме того, если пользователь создает вредоносный запрос POST с дополнительными парами ключ-значение, то форма не обновит те, которые не указаны в форме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...