मैं अजगर/डीजेंगो में एक फॉर्मेट बना रहा हूं और बटन को क्लिक करने के रूप में एक फॉर्मेट में गतिशील रूप से अधिक फ़ील्ड जोड़ने की आवश्यकता है। जिस फॉर्म पर मैं काम कर रहा हूं वह मेरे स्कूल के लिए छात्रों से पूछता है कि वे कुछ अकादमिक जानकारी का खुलासा करना चाहते हैं, और यहां बटन उन्हें परिवार के सदस्यों/लोगों को दर्ज करने के लिए और अधिक फ़ील्ड जोड़ने की अनुमति देता है, जिन्हें वे प्रकट करना चाहते हैं।क्या एक django प्रारूप जो गतिशील रूप से फ़ील्ड जोड़ता है, लगातार डेटा हो सकता है?
मेरे पास उस बिंदु पर काम करने वाला बटन है जहां अतिरिक्त फ़ील्ड दिखाई देते हैं, और आप जितनी चाहें उतनी जोड़ सकते हैं। समस्या यह है कि पहले से मौजूद मौजूदा फ़ील्ड में दर्ज किया गया डेटा हटा दिया जाता है। हालांकि, फ़ॉर्मेट में केवल चीजें हटा दी जाती हैं। सब कुछ जो पहले फॉर्म में भर गया था, लगातार रहता है।
क्या फ़ॉर्मेट को दबाए जाने से पहले दर्ज किए गए डेटा को रखने का कोई तरीका है?
form.py:
from django import forms
from models import Form, ParentForm, Contact
from django.core.exceptions import ValidationError
def fff (value):
if value == "":
raise ValidationError(message = 'Must choose a relation', code="a")
# Create your forms here.
class ModelForm(forms.ModelForm):
class Meta:
model = Form
exclude = ('name', 'Relation',)
class Parent(forms.Form):
name = forms.CharField()
CHOICES3 = (
("", '-------'),
("MOM", 'Mother'),
("DAD", 'Father'),
("GRAN", 'Grandparent'),
("BRO", 'Brother'),
("SIS", 'Sister'),
("AUNT", 'Aunt'),
("UNC", 'Uncle'),
("HUSB", 'Husband'),
("FRIE", 'Friend'),
("OTHE", 'Other'),
("STEP", 'Stepparent'),
)
Relation = forms.ChoiceField(required = False, widget = forms.Select, choices = CHOICES3, validators = [fff])
models.py
from django.db import models
from django import forms
from content.validation import *
from django.forms.models import modelformset_factory
class Contact(models.Model):
name = models.CharField(max_length=100)
class Form(models.Model):
CHOICES1 = (
("ACCEPT", 'I agree with the previous statement.'),
)
CHOICES2 = (
("ACADEMIC", 'Academic Records'),
("FINANCIAL", 'Financial Records'),
("BOTH", 'I would like to share both'),
("NEITHER", 'I would like to share neither'),
("OLD", "I would like to keep my old sharing settings"),
)
Please_accept = models.CharField(choices=CHOICES1, max_length=200)
Which_information_would_you_like_to_share = models.CharField(choices=CHOICES2, max_length=2000)
Full_Name_of_Student = models.CharField(max_length=100)
Carthage_ID_Number = models.IntegerField(max_length=7)
I_agree_the_above_information_is_correct_and_valid = models.BooleanField(validators=[validate_boolean])
Date = models.DateField(auto_now_add=True)
name = models.ManyToManyField(Contact, through="ParentForm")
class ParentForm(models.Model):
student_name = models.ForeignKey(Form)
name = models.ForeignKey(Contact)
CHOICES3 = (
("MOM", 'Mother'),
("DAD", 'Father'),
("GRAN", 'Grandparent'),
("BRO", 'Brother'),
("SIS", 'Sister'),
("AUNT", 'Aunt'),
("UNC", 'Uncle'),
("HUSB", 'Husband'),
("FRIE", 'Friend'),
("OTHE", 'Other'),
("STEP", 'Stepparent'),
)
Relation = models.CharField(choices=CHOICES3, max_length=200)
def __unicode__(self):
return 'name: %r, student_name: %r' % (self.name, self.student_name)
और views.py
from django.shortcuts import render
from django.http import HttpResponse
from form import ModelForm, Parent
from models import Form, ParentForm, Contact
from django.http import HttpResponseRedirect
from django.forms.formsets import formset_factory
def create(request):
ParentFormSet = formset_factory(Parent, extra=1)
if request.POST:
Parent_formset = ParentFormSet(request.POST, prefix='Parent_or_Third_Party_Name')
if 'add' in request.POST:
list=[]
for kitties in Parent_formset:
list.append({'Parent_or_Third_Party_Name-0n-ame': kitties.data['Parent_or_Third_Party_Name-0-name'], 'Parent_or_Third_Party_Name-0-Relation': kitties.data['Parent_or_Third_Party_Name-0-Relation']})
Parent_formset = ParentFormSet(prefix='Parent_or_Third_Party_Name', initial= list)
form = ModelForm(request.POST)
if form.is_valid() and Parent_formset.is_valid():
form_instance = form.save()
for f in Parent_formset:
if f.clean():
(obj, created) = ParentForm.objects.get_or_create(name=f.cleaned_data['name'], Relation=f.cleaned_data['Relation'])
return HttpResponseRedirect('http://Google.com')
else:
form = ModelForm()
Parent_formset = ParentFormSet(prefix='Parent_or_Third_Party_Name')
return render(request, 'content/design.html', {'form': form, 'Parent_formset': Parent_formset})
def submitted(request):
return render(request, 'content/design.html')
अग्रिम धन्यवाद!
इसके अलावा, शैली पर दोस्ताना टिप्पणी: आप अपने मॉडल में सभी फ़ील्ड को lowcase_underscore बनना चाह सकते हैं। आप उस फॉर्म और कैपिटल के बीच स्विच कर रहे हैं (उदाहरण के लिए "फॉर्म" और "फॉर्म" आपके फॉर्म मॉडल के लिए) – Temuz
फ़ॉर्मेट में मान हटाए जा रहे थे। बेशक, अब जब मैं अपने सहकर्मियों में से एक उपहार प्राप्त करता हूं तो यह मेरे लिए बाहर निकलता है –
बस एहसास हुआ कि मैंने कभी आपका जवाब स्वीकार नहीं किया है। उसके लिए माफ़ करना! –