2016-09-07 27 views
0

1つまたは複数のアイテムを注文できるウィザードを作成しています(Django Formtoolsを使用しています)。Djangoフォームとmany2many.throughフィールド

私は古典的なカートシステムを避け、可能な限りシンプルな購入をしたいと思います。私のナビゲーションの提案は、3ページ/ステップしか持たないことです:

  1. 最初のページには利用可能なすべての項目が表示されます。それらのアイテムを選択し、訪問者が数量を指定することができます。
  2. 2ページ目は、注文の要約を行い、来場者が
  3. その詳細を記入するよう求められ、最後のページには、私が最初のステップのためのフォームを作成するトラブルを抱えていると私は」オーダー

を確認します私が試した2つの選択肢の中間を見つけるための助けを探していました。

私のDjangoのモデルは、この(デモンストレーションのために簡略化)のように見える:私はすべての利用可能なアイテムの一覧表示することができるよ

次のModelFormを使用して
class Item(models.Model):                             
    name = models.CharField(max_length=255) 
    price = models.DecimalField(max_digits=5, decimal_places=2) 

class Order(TransactionBase): 
    items = models.ManyToManyField(Item, through='OrderedItem') 

class OrderedItem(models.Model): 
    order = models.ForeignKey(Order) 
    item = models.ForeignKey(Item) 
    quantity = models.PositiveSmallIntegerField() 

class OrderSelectionForm(forms.ModelForm): 
    class Meta: 
     model = Order                                
     fields = ('items',) 
     widgets = { 
      'items': forms.CheckboxSelectMultiple(), 
     } 

をしかし、それはdoesnの数量を指定することができます。

次のコードを使用して、数量を指定できるフォームを作成することができます。

inlineformset_factory(Order, Order.items.through) 

しかし、すべての利用可能な項目のフラットなリストを表示する代わりに、ドロップダウンリストで希望の項目を選択する3つのセットが表示されます。

2つの承認を組み合わせて、使用可能なすべてのアイテムを一覧表示し、数量を指定できるようにするにはどうすればよいですか?

ありがとうございます。

答えて

1

[編集]:以前の回答をコピーエラーとして削除しました。

この段階では、注文を処理していません。 を提出すると、カタログを発注するカタログを提供しています。したがって、アイテムをフォームから取り出し、チェックボックスと数量にアイテムにリンクできる名前を入力し(アイテムの主キーを組み込む)、送信時に注文を生成します。

+0

こんにちは、私の質問を編集したのは、パッケージへの参照が誤植でした(わかりやすくするため、私の質問ではPackageをitemに変更しました)。 – user1415785

関連する問題