चूंकि मैं Django में नया हूं, मैं django में विशिष्ट फॉर्म फ़ील्ड को कैसे अपडेट कर सकता हूं? जब मैं टेम्पलेट में {{ form.as_p }} करता हूं तो यह काम करता है, लेकिन कुछ फॉर्म फ़ील्ड हैं जिन्हें दूसरे फॉर्म पर दिखाने की आवश्यकता नहीं है, लेकिन कुछ की आवश्यकता है। तो मैंने जो किया वह यह है कि उन्हें केवल कुछ रूपों पर अद्यतन करने के लिए आवश्यक भरण कहते हैं।

यहां मेरा अपडेट व्यू है:

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'])

यह वर्ग सामान्य दृश्य वास्तव में {{ 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 का उपयोग/दिखाना नहीं चाहता, जब उपयोगकर्ता वहां व्यक्तिगत जानकारी अपडेट करेगा।

0
Kim Nicole Sabordo 8 अप्रैल 2020, 21:39

1 उत्तर

सबसे बढ़िया उत्तर

अपने UserInfoForm में आप फ़ील्ड के साथ निर्दिष्ट कर सकते हैं कि आपको कौन सी फ़ील्ड चाहिए। उदाहरण के लिए:

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

इस प्रकार यह अन्य क्षेत्रों को परिभाषित नहीं करेगा। इसके अलावा यदि कोई उपयोगकर्ता अतिरिक्त कुंजी-मूल्य जोड़े के साथ एक दुर्भावनापूर्ण POST अनुरोध बनाता है, तो फ़ॉर्म फ़ॉर्म में सूचीबद्ध नहीं होने वाले POST को अपडेट नहीं करेगा।

0
Willem Van Onsem 8 अप्रैल 2020, 18:44