0

我有一个非常特殊的问题,关于从某种形式创建一个表单集。问题是,表单必须具有未公开数量的字段,因此我想将一个变量传递给该表单,该变量将从数据库中获取适当的模型,并在表单的init方法中创建适当的字段。

StrangeForm(forms.Form):
    def __init__(self, id, *args, **kwargs):
        super(StrangeForm, self).__init__(*args, **kwargs)
        # get the form's base entry
        self.certain_entry = Certain_Entry.objects.get(id=id)
        # create a hidden input to keep the id
        self.fields["id"] = forms.HiddenInput()
        self.fields["id"].initial = id
        # initiate text field
        self.fields["text_field"] = forms.CharField(widget=forms.TextInput(attrs={'style': 'width:95%', }),
                                                 required=False)
        self.fields["text_field"].initial = self.certain_entry.text
        # create and initiate fields for undisclosed number of subentries
        subordinates = Certain_Entry_Subordinates.objects.filter(foreign_key=self.certain_entry)
        for each in subordinates:
            the_name = "%d_%s_%s" % (each.further.id, each.further.name)
            self.fields[the_name] = forms.ChoiceField(choices=(("Ok", "Ok"), ("Not Ok", "Not Ok"), ("Maybe" "Maybe"),
                                                      required=False)
            self.fields[the_name].initial = each.option

型号如下:

class Certain_Entry(models.Model):
    text = models.TextField(max_length=128, null=True, blank=True)

class Certain_Entry_Subordinates(models.Model):
    certain_entry = models.ForeignKey(Certain_Entry, null=False, blank=False)
    option = models.TextField(max_length=8, null=True, blank=True)
    further = models.ForeignKey(Further, null=False, blank=False)

class Further(models.Model):
    name = models.TextField(max_length=32, null=True, blank=True)

如您所见,我需要将此 ID 传递到表单中。当它是单个表单时,一切都可以,但是我找不到有关如何使用需要变量的表单创建表单集的任何信息。有任何想法吗?

PS:至于为什么...不要问,我只需要那样做,相信我。我是个工程师。

4

0 回答 0