How to pass 'section' into ItemForm.__init__ ? Revision 616564613331 (Tue Jun 23 2009 at 20:04) - Diff Link to this snippet: https://friendpaste.com/2Rtzh6wOiUMQA0aRJTpC0Q Embed: manni perldoc borland colorful default murphy trac fruity autumn bw emacs pastie friendly Show line numbers Wrap lines 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394# models ********************class Section(models.Model): """ A section has a begin and end valid date which represents : 'Where can we interact with all related/children objects ?' """ title = models.CharField(_(u"Title"), max_length=200) begin = models.DateField(_(u"Date début")) end = models.DateField(_(u"Date fin"))class Article(models.Model): """ Simple object """ title = models.CharField(_(u"Title"), max_length=200) section = models.ForeignKey(Section, blank=True)class Item(models.Model): """ This item is related to an article It has to know when it is valid, a date between its section begin/end """ title = models.CharField(_(u"Title"), max_length=200) date = models.DateField()# forms ********************class ItemForm(forms.ModelForm): """ The date has to be a list of choices from self.article.section.begin / end """ date = ChoiceField(choices={}) def __init__(self, section, *args, **kwargs): super(ItemForm, self).__init__(*args, **kwargs) begin = date(2009, 06, 16) #section.begin end = date(2009, 06, 18) #section.end daterange = end-begin choices = [('','-----')] for i in range(daterange.days): date_in = (begin + timedelta(i)) verbose_date = "%s %s %s" % (date_in.day, month_name(date_in.month), date_in.year) choices.append((date_in, verbose_date)) self.fields['date'].choices=choices class Meta: model = Itemclass ArticleForm(ModelForm): class Meta: model = Article# views ********************def items_form(request, section_id, article_id=None): """ Create/Update an article and its related items """ section = get_object_or_404(Section, id=section_id) try: article = Article.objects.get(id=article_id) except Article.DoesNotExist: article = Article() ItemFormSet = inlineformset_factory(Article, Item, form=ItemForm, extra=2, can_delete=True) if request.method == "POST": form = ArticleForm(data=request.POST, instance=article) formset = ItemFormSet(request.POST, instance=article, **kwargs) if form.is_valid() and sessionformset.is_valid(): object = form.save(commit=False) object.section=section object.save() sessionformset.save() # do something ... else: form = ArticleForm(instance=article) formset = ItemFormSet(instance=article, **kwargs) # render template ...