मुझे किसी फ़ॉर्मेट में चयन करने योग्य विकल्पों को सीमित करने में समस्याएं आ रही हैं। मेरे पास निम्नलिखित मॉडल हैं: कर्मचारी, विभाग, परियोजना, परियोजना प्रकार, सदस्यता, और भूमिका। एक कर्मचारी फॉर्मेट में किसी दिए गए विभाग परियोजना के लिए जो भूमिका निभाता है उसे जोड़/हटा सकता है, फॉर्म को चुनिंदा परियोजनाओं को केवल उस विभाग से संबंधित होना चाहिए जो कर्मचारी संबंधित है।django: फ़ॉर्मेट में फ़ील्ड विकल्पों को कैसे सीमित करें?
मॉडल:
class Department(models.Model):
name = models.CharField(max_length=20)
def __unicode__(self):
return self.name
class Employee(models.Model):
fname = models.CharField(max_length=15)
department = models.ForeignKey(Department)
def __unicode__(self):
return self.fname
class Projecttype(models.Model):
name = models.CharField(max_length=20)
def __unicode__(self):
return self.name
class Project(models.Model):
projecttype = models.ForeignKey(Projecttype)
department = models.ForeignKey(Department)
members = models.ManyToManyField(Employee, through='Membership')
def __unicode__(self):
return "%s > %s" % (self.department, self.projecttype)
class Role(models.Model):
name = models.CharField(max_length=20)
def __unicode__(self):
return self.name
class Membership(models.Model):
project = models.ForeignKey(Project, null=True)
department = models.ForeignKey(Department)
employee = models.ForeignKey(Employee)
role = models.ManyToManyField(Role, blank=True, null=True)
class Meta:
unique_together = (("project", "employee",),)
देखें:
def employee_edit(request, employee_id):
i = get_object_or_404(Employee, pk=employee_id)
MembershipFormSet = modelformset_factory(Membership, exclude=('department', 'employee'),)
f = MembershipFormSet(queryset=Membership.objects.filter(employee=i),)
return render_to_response('gcs/edit.html', {'item': i, 'formset': f, }, context_instance=RequestContext(request))
अभी एक यूरोपीय संघ के किसी भी विभागों परियोजना के लिए खेलने के लिए एक भूमिका का चयन कर सकते हैं। यह इस तरह से कार्य करे, तो:
परियोजना विकल्प:
Projects.objects.all()
मैं कुछ इस तरह के साथ परियोजनाओं को सीमित करना चाहते: LIMIT परियोजना CHOCIES के लिए:
Projects.objects.filter(department=i.department)
[यह ढेर अतिप्रवाह सवाल] (http://stackoverflow.com/questions/622982/django-passing-custom-form-parameters-to-formset) काफी है समान। काम करने वाले दो दृष्टिकोण हैं। 1) एक ऐसा फॉर्म बनाएं जो कर्मचारी को '__init__' विधि में तर्क के रूप में लेता है और करी फ़ंक्शन का उपयोग करता है। 2) व्यू फ़ंक्शन में फॉर्म क्लास बनाएं।यदि आपको कहीं और फॉर्म का पुन: उपयोग करने की आवश्यकता नहीं है, तो मुझे दूसरा दृष्टिकोण आसान लगता है। – Alasdair
नया पायथन के लिए, क्या आप फॉर्म क्लास को दृश्य में रूपांतरित करते हैं जैसे आप model.py में करेंगे? – thedeepfield
मैंने अपनी टिप्पणी को नीचे दिए गए उत्तर के रूप में विस्तारित किया है। – Alasdair