मुझे व्यवस्थापक इंटरफ़ेस के लिए कोई क्रिया बनाने में रूचि है जिसके लिए चयनित वस्तुओं से परे कुछ अतिरिक्त जानकारी की आवश्यकता है। मेरा उदाहरण एक श्रृंखला में कॉमिक्स जोड़ना थोक है। (हां, मुझे पता है कि स्पष्ट जवाब एक्स-टू-एक्स संबंधों के साथ एक स्कीमा बनाना है, लेकिन एक साधारण उदाहरण के लिए मेरे साथ बेकार है)।Django: एक जटिल व्यवस्थापक कार्रवाई कैसे बनाएं जिसके लिए अतिरिक्त जानकारी की आवश्यकता है?
इस उदाहरण में, मैंने 100 कॉमिक्स बनाए हैं। उनके निर्माण के बाद, मैं उन्हें एक श्रृंखला ऑब्जेक्ट से जोड़ना चाहता हूं जो पहले ही बनाया जा चुका है। व्यवस्थापक के भीतर इस क्रिया को निष्पादित करने के लिए, मैं आइटम का चयन करना चाहता हूं फिर कार्रवाई शुरू करें। तब मुझे पूछा जाना चाहिए कि किस श्रृंखला वस्तु का उपयोग करना है (पॉपअप, मध्यवर्ती रूप, आदि के माध्यम से)।
मैंने here निर्देशों का पालन किया है जो इसे मध्यवर्ती रूप के माध्यम से पूरा करने का दावा करते हैं। इसके साथ काम करने के बाद, मुझे और अधिक त्रुटियां नहीं मिल रही हैं, लेकिन कार्रवाई को या तो निष्पादित नहीं किया जा रहा है - फॉलोअप कभी निष्पादित नहीं होता है। इसके बजाए, यह संदेश के साथ कॉमिक्स की व्यवस्थापक सूची में लौटता है: "कोई कार्रवाई नहीं चुनी गई।"
मेरी admin.py विधि:
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.http import HttpResponseRedirect
def addSeries(self, request, queryset):
form = None
if 'cancel' in request.POST:
self.message_user(request, 'Canceled series linking.')
return
elif 'link_series' in request.POST:
form = self.SeriesForm(request.POST)
if form.is_valid():
series = form.cleaned_data['series']
for x in queryset:
y = Link(series = series, comic = x)
y.save()
self.message_user(request, self.categorySuccess.render(Context({'count':queryset.count(), 'series':series})))
return HttpResponseRedirect(request.get_full_path())
if not form:
form = self.SeriesForm(initial={'_selected_action': request.POST.getlist(admin.ACTION_CHECKBOX_NAME)})
return render_to_response('setSeries.html', {'comics': queryset, 'form': form, 'path':request.get_full_path()}, context_instance=RequestContext(request))
addSeries.short_description = 'Set Series'
मेरे मध्यवर्ती रूप setSeries.html:
<!DOCTYPE html>
<html>
<head>
<title>Create Series Links</title>
</head>
<body>
<h1>Create Series Links</h1>
<p>Choose the series for the selected comic(s):</p>
<form method="post" action="{{ path }}">
<table>
{{ form }}
</table>
<p>
<input type="hidden" name="action" value="changeSeries" />
<input type="submit" name="cancel" value="Cancel" />
<input type="submit" name="link_series" value="link_series" />
</p>
</form>
<h2>This categorization will affect the following:</h2>
<ul>
{% for comic in comics %}
<li>{{ comic.title }}</li>
{% endfor %}
</ul>
</body>
</html>
धन्यवाद! इससे सब कुछ पूरी तरह से काम करता है। – tjw