2016-06-16 5 views
1

私はDjangoを学習しています。アプリのユーザーがテンプレートを通じてitem_nameフィールドにオプションを追加できるようにする必要がありますが、アイデアはありませんそれを達成する方法について。助けてくれてありがとう。テンプレートを使用してdjangoモデルの選択肢にオプションを追加するには

ここにここに私のモデル

class ItStore(models.Model): 
    type_choice = (
      ('Printer Catridge', 'Printer Catridge'), 
      ('UPS', 'UPS'), 
      ('UPS Battery', 'UPS Battery'), 
      ('Mouse', 'Mouse'), 
      ('Keyboard', 'Keyboard'), 
     ) 
    item_name = models.CharField(max_length='100', blank=True, null=False, choices=type_choice) 
    quantity = models.IntegerField(default='', blank=True, null=False) 

は、私の見るここ

def itstore_create(request): 
    form = ItStoreCreateForm(request.POST or None) 
    submit = "Create IT Store Items" 
    if form.is_valid(): 
     instance = form.save(commit=False) 
     instance.save() 
     message = instance.item_name + " Successfully Created" 
     messages.success(request, message) 
     return redirect("items:itstore_list") 
    context = { 
     "form": form, 
     "title": "CREATE ITEM", 
    } 
    return render(request, "store_form.html", context) 

は私のフォームはあなたがn

class ItStoreCreateForm(forms.ModelForm): 
    class Meta: 
     model = ItStore 
     fields = ['item_name', 'quantity'] 
+0

追加オプションにはどのようなものがありますか?つまり、いつ追加のオプションを追加しますか? –

+0

ユーザが現在の選択リストにない項目を選択したい場合は、追加フィールドを追加することができます – simplyvic

+0

次に、同じドロップダウンを使用すべきではありません。フォームが初期化されるときに 'item_name'の' choices'がセットされるので、 'type_choice'以外の新しい選択肢はあなたに'有効な選択肢を選択します。その選択肢は、利用可能な選択肢のエラーの1つではありません。 –

答えて

1

可能性があるですお使いのモデルにchoices=を定義してください代わりに、モデルの外にあるデフォルトの選択肢のリストを定義します。

my_choices = (
    "foo", 
    "bar", 
    "pop", 
) 
class MyModel(models.Model): 
    my_field = models.CharField(max_length=100) 

次に、あなたのビューで、あなたがそのタプルをインポートし、テンプレートあなたにそれを渡したいと思います:

from my_app.models import my_choices 

def my_view(request, *a, **kw): 
    # view logic 
    return render(request, "path/to/my/template", choices=my_choices) 

は、その後、あなたのテンプレートでは、デフォルトの選択肢と文字列値を持つ選択ボックスを持つことができます。また、追加された場合は、そのフィールドに保存するオプションのinput type=textがあります。以下のような

何か:

<select name="my_field"> 
<option value="" selected="selected">-----</option> 
{% for choice in choices %} 
    <option value="{{ choice }}">{{ choice }}</option> 
{% endfor %} 
</select> 

はあなたにデフォルトの選択肢を提供します。同じ名前の入力を追加すると、オプションの新しい選択肢として機能します。

<input type="text" name="my_field"/> 

オプションで、選択ボックスまたはテキストフィールドのみがサブミットされるようにJavaScriptロジックを記述することができます。

+0

"選択肢をモデルに定義できませんでした。 "これは基本的に私の考えでした。 'choices'がDB内の独自のクラスに移動されると、追加/削除は簡単になります。いくつかのレベルのモデレーションを行いたいかもしれませんが、それはまったく別のテーマです。 –

+0

marcusshep、私はdjangoを初めて使っています。私は本当にあなたが話していることを理解していません。あなたは例を与えるためにコードを使用してくださいできますか?ありがとうございました – simplyvic

+0

私の答えを更新しました – marcusshep

関連する問題