मैं Django के लिए अपेक्षाकृत नया हूं, और मैं एक ऐसा फॉर्म बना रहा हूं जिसे मैं मौजूदा MySQL डेटाबेस से जोड़ रहा हूं।

मैं जो करने की कोशिश कर रहा हूं वह देशों के लिए एक रखरखाव पृष्ठ बनाना है। मेरे डेटाबेस में एक फ़ील्ड eu_member_state है।

मैं यहां जो करने की कोशिश कर रहा हूं वह इस क्षेत्र के लिए एक चेकबॉक्स बनाना है, इसलिए मैं इसे यूनाइटेड किंगडम के लिए अनचेक कर सकता हूं जो हाल ही में यूरोपीय संघ से बाहर हो गया है।

class CountryForm(forms.ModelForm):
    class Meta():
        model = Countries
        fields = '__all__'

        widgets = {
            'eu_member_state': forms.CheckboxInput()
        }

चेकबॉक्स मेरे फॉर्म पर दिखाई देता है, लेकिन मैं यह बात अपने डेटाबेस से कैसे कर सकता हूं? इस चेकबॉक्स को केवल तभी चेक किया जा सकता है जब डेटाबेस मान 'Y' हो, और मैं इसे अपने डेटाबेस में वापस सहेजने पर कैसे लिखूं, इसलिए चेक किए जाने पर 'Y' और अनियंत्रित होने पर 'N'?

यह मॉडल कोड है:

from django.db import models

class Countries(models.Model):
    country = models.CharField(unique=True, max_length=3)
    descr = models.CharField(max_length=50, blank=True, null=True)
    descrshort = models.CharField(max_length=20, blank=True, null=True)
    country_2char = models.CharField(max_length=2, blank=True, null=True)
    eu_member_state = models.CharField(max_length=1, blank=False, null=False, default='N')

    class Meta:
        db_table = 'countries'
        verbose_name_plural = "countries"

    def __str__(self):
        return self.descr
1
Ron 28 मार्च 2020, 15:50

1 उत्तर

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

मैं कस्टम चेकबॉक्स इनपुट फ़ील्ड बनाकर इसके आसपास काम करने में कामयाब रहा और इसे form.py में प्रारंभ किया।

class CountryForm(forms.ModelForm):

    eu_member_state_flag = forms.BooleanField(required=False,label='EU member state')

    class Meta():
        model = Countries
        exclude = ('eu_member_state',)


    def __init__(self, *args, **kwargs):
        super(CountryForm, self).__init__(*args, **kwargs)

        if self.instance.eu_member_state == "Y":
            flag_value = True
        else:
            flag_value = False

        self.initial['eu_member_state_flag'] = flag_value

फिर view.py में मैं चेकबॉक्स इनपुट फ़ील्ड का मान ला रहा हूं और इसे 'वाई' या 'एन' में परिवर्तित कर रहा हूं।

class UpdateCountryView(LoginRequiredMixin,UpdateView):
    login_url= '/login/'
    redirect_field_name = 'tour_admin/countries_list.html'
    form_class = CountryForm
    model = Countries

    def form_valid(self, form):
        if form.is_valid():
            data = form.cleaned_data

            if data['eu_member_state_flag']:
                data['eu_member_state'] = 'Y'
                self.object.eu_member_state = 'Y'
            else:
                data['eu_member_state'] = 'N'
                self.object.eu_member_state = 'N'
            self.object.save()

        return HttpResponseRedirect(self.get_success_url())

    def get_success_url(self):
        return reverse('countries_list')
0
Ron 28 मार्च 2020, 20:01