2017-02-17 3 views
0

最初は私の英語を口実にしましょう、それは私の母国語ではありません。Modelformのフィールドの任意の数

私はCellとRowモデルを持つことに決めたので、各行に1000行と5セルという表を作成する必要があります。

models.py

class Cell(models.Model): 
    content = models.CharField(max_length=100) 
    row = models.ForeignKey('Row') 

class Row(models.Model): 
    pass 

表のセルの内容が(iはランダムデータで埋めてい現在の段階で)重要ではありません。

私が必要とするのは、新しい行を追加できることです。フォームには、各セルに入力フィールドがある必要があります(その性質は絶対的に重要ではありません)。私はのModelFormを使用することを好む:

forms.py

class RowForm(forms.ModelForm): 
    class Meta: 
     model = Row 
     fields = ??? <- problem here. 

私は細胞の量は、将来的に変更される可能性があることを念頭に置いて、各セル(のための入力フィールドを提供するのModelFormを取得できますか)?私は私のニーズをかなりはっきりと表現して欲しいと思います。どうもありがとう!

+1

のModelFormの目的は、あなたのモデルに基づいてフォームを作成することです。しかし、あなたの行モデルはあなたの細胞について何も知らないし、行の中にあるべき細胞の数も知らない。あなたの細胞はその列の畑ではありませんでしたか?そうでない場合は、独自のフォームを作成する必要があります。 –

+0

さて、それを自分の形にしましょう。それはそれが細胞の量に不可知論にすることは可能ですか? –

+1

あなたはインスピレーションのためにDjangoの文書をhttps://docs.djangoproject.com/en/1.10/topics/forms/formsets/で見ることができます! –

答えて

1

あなたはこれを考えています。データベースでは、セルは列と行が交差する場所です。実際には、cellというモデルを作成すべきではありません。必要なのは

class Row(models.Model) 
    col1 = models.SomeField() 
    col2 = models.SomeField() 
    col3 = models.SomeField() 
    col4 = models.SomeField() 
0

は、私は次のコードで必要なものを持っている:

forms.py

class RowForm(forms.Form): 
    cell = forms.CharField(label='Ячейка', max_length=100) 


class RowFormSet(BaseFormSet): 
    min_num = 5 
    max_num = 5 
    absolute_max = 5 
    extra = 0 
    form = RowForm 
    can_order = False 
    can_delete = False 
    validate_max = False 
    validate_min = False 

    def __init__(self, *args, **kwargs): 
     super(RowFormSet, self).__init__(*args, **kwargs) 
     for i in range(0, NUMBER_OF_CELLS): 
      self[i].fields['cell'].label += " %d" % (i + 1)