मैं दो परियोजनाओं मैं पिछले थोड़ी देर में पर काम किया है के साथ इस समस्या पड़ा है। मेरे उदाहरण समाधान के लिए मेरे पास एक "फॉर्म" है जिसमें कई "चर" हैं और फ़ॉर्म पर चर के क्रम को क्रमबद्ध करने की आवश्यकता है। तो मैं लागू कर दिया है निम्नलिखित:
models.py
class Form(models.Model):
FormName = models.CharField(verbose_name="Form Name:", max_length=40)
VariableOrder = models.CommaSeparatedIntegerField(default="[]", editable=False)
def __unicode__(self):
return "%s" % (self.FormName)
class Variable(models.Model):
FormID = models.ForeignKey(Form, default=0, editable=False, related_name="Variable")
VarName = models.CharField(max_length=32, verbose_name="Name of variable in the database:")
def __unicode__(self):
return "%s" % self.VarName
ऊपर से कुंजी VariableOrder CommaSeparatedIntegerField जहाँ हम फार्म पर चर के आदेश स्टोर करने के लिए जा रहे हैं, और हम करने जा रहे हैं इसे एक पायथन सूची के रूप में उपयोग करें, यही कारण है कि डिफ़ॉल्ट [] है।
टेम्पलेट के लिए मैं अपने वैरिएबल को प्रस्तुत करता हूं कि हम ड्रैग और ड्रॉप सॉर्ट करने योग्य हैं (सूची तत्व जो मैं वास्तव में उपयोग करता हूं, उनमें एक टन अधिक सीएसएस संबंधित स्टाइल और वेरिएबल के बारे में जानकारी है)।
<ul id="sortable">
{% for Variable in VarList %}
<li id="{{ Variable.id }}">{{ Variable }}</li>
{% endfor %}
</ul>
अब हम सूची बदलने के लिए सूची खींचने और ड्रॉप करने जा रहे हैं। इसके लिए आपको सिर में Django साइट से AJAX CSRF टुकड़ा करने की जरूरत है काम करने के लिए
$(function() {
$("#sortable").sortable({
placeholder: "ui-state-highlight",
update: function(event, ui){
$.ajax({
type:"POST",
url:"{% url builder.views.variableorder %}",
data: {Order: JSON.stringify($('#sortable').sortable('toArray')) },
success: function(data){
// Do stuff here - I don't do anything.
}
});
}
});
$("#sortable").disableSelection();
});
महत्वपूर्ण हिस्सा ऊपर है कि "अद्यतन" समारोह हर बार में से किसी की एक स्थिति परिवर्तन होता है कहता है चर, जो AJAX भेजता है। JSON स्ट्रिंग के साथ क्रमबद्ध करने के लिए toArray हमें निम्न चर के नीचे आईडी को नीचे भेजता है, जिसका उपयोग इस प्रकार दृश्य द्वारा किया जाता है। नोट: मैं सक्रिय फॉर्म ऑब्जेक्ट को सत्र चर के रूप में रखता हूं, लेकिन किसी अन्य मामले में आपको उस फ़ॉर्म ऑब्जेक्ट को कॉल करने की आवश्यकता होगी जिसे आप ऑर्डर बदलना चाहते थे।
def variableorder(request):
if request.is_ajax():
Order = request.POST['Order']
updateOrder = request.session['FormID']
updateOrder.VariableOrder = newOrder
updateOrder.save()
request.session['FormID'] = Form.objects.get(id=updateOrder.id)
return HttpResponse("Order changed.")
else:
pass
इस सब की महत्वपूर्ण यह है कि आप स्ट्रिंग का मूल्यांकन करके एक सूची के रूप में इस CommaSeparatedIntegerField का उपयोग कर सकते है।उदाहरण के लिए:
aForm = Form.objects.get(id=1)
currentOrder = aForm.VariableOrder
currentOrder = eval(currentOrder)
# Variable ID that we want to delete = 3
currentOrder.remove(3)
aForm.VariableOrder = currentOrder
aForm.save()
चर प्रतिपादन आदेश में:
aForm = Form.objects.get(id=1)
currentOrder = aForm.VariableOrder
currentOrder = eval(currentOrder)
VarList = []
for i in currentOrder:
VarList.append(Variable.objects.get(id=i))
एक चर निकाला जा रहा है
aForm = Form.objects.get(id=1)
currentOrder = aForm.VariableOrder
currentOrder = eval(currentOrder)
newVar = Variable(stuff in here)
newVar.save()
currentOrder.append(newVar.id)
aForm.VariableOrder = currentOrder
aForm.save()
:
एक चर जोड़ना
यह एक मोटा पहला मसौदा है जिसका मैं उपयोग करने जा रहा हूं, लेकिन यह मेरे लिए अच्छा काम कर रहा है। कक्षा में एक विधि होने के नाते पाइथन सूची का मूल्यांकन होना स्पष्ट पहला सुधार है। जैसे।
def getVarOrder(self):
return eval(self.VariableOrder)
और फिर केवल सूची.getVarOrder() को कॉल करें जब सूची में हेरफेर करना चाहते हैं। किसी भी मामले में उम्मीद है कि यह मदद करता है।
जेडी
अच्छा। मुझे बेसिक में लाइन नंबरों की याद दिलाता है। :-) –