2016-08-27 2 views
1

私は各サイトが可能なカテゴリの範囲から選択された単一のカテゴリを持つDjangoアプリケーションを作成しています。だから私は2つのモデル:SiteCategoryがあります。ModelFormは選択肢ではなくForeignKeyテーブルの値を表示します

SiteCategoryモデルの間に多対1の関係が必要です。 Categoryテーブルにはさまざまなカテゴリの選択肢が含まれており、それぞれのSiteレコードには、これらのカテゴリの1つを参照する外部キーがあります。

models.py:

from django.db import models 
from django.utils.encoding import python_2_unicode_compatible 
@python_2_unicode_compatible # for python 2 support 

class Site(models.Model): 
    Category = models.ForeignKey('Category') 

    def __str__(self): 
    return self.Name 

CATEGORY_CHOICES = (
        ('AU', 'Automobiles'), 
        ('BE', 'Beauty Products'), 
        ('GR', 'Groceries'), 
        ) 

class Category(models.Model): 
    Category = models.CharField(choices=CATEGORY_CHOICES,max_length=2) 

    def __str__(self): 
    return '%s' % (self.Category) 

forms.py:

from django.forms import ModelForm 
from sites.models import Site 

class NewSiteForm(ModelForm): 
    class Meta: 
     model = Site 
     fields = ['Category'] 

newsite.html:

Newsite.htmlは私に既に格納された値を示していますカテゴリードロップダウンを与え
<!DOCTYPE html> 
<form method="post" action=""> 
{{ form}} 
</form> 

カテゴリー・モデルで定義されている選択肢タプルの内容をリストするのではなく、カテゴリー・データベースに追加します。私はこれを取得しています:

<!DOCTYPE html> 
<form method="post" action=""> 
<tr><th><label for="id_Category">Category:</label></th><td><select     id="id_Category" name="Category"> 
<option value="" selected="selected">---------</option> 
<option value="1">AU</option> 
<option value="2">BA</option> 
<option value="3">BE</option> 
<option value="4">BO</option> 
<option value="5">PH</option> 
<option value="6">CO</option> 
<option value="7">CC</option> 
<option value="8">CB</option> 
<option value="9">CE</option> 
<option value="10">CS</option> 
<option value="11">CA</option> 
<option value="12">EA</option> 
<option value="13">EC</option> 
<option value="14">FA</option> 
<option value="15">GR</option> 
<option value="16">HA</option> 
<option value="17">HE</option> 
<option value="18">HG</option> 
<option value="19">IN</option> 
<option value="20">JE</option> 
<option value="21">LT</option> 
<option value="22">MS</option> 
<option value="23">MU</option> 
<option value="24">MI</option> 
<option value="25">OF</option> 
<option value="26">OU</option> 
<option value="27">PC</option> 
<option value="28">SH</option> 
<option value="29">SO</option> 
<option value="30">SP</option> 
<option value="31">TO</option> 
<option value="32">TY</option> 
<option value="33">DV</option> 
<option value="34">CL</option> 
<option value="35">WA</option> 
<option value="36">WI</option> 
</select></td></tr> 
</form> 

私はちょうどこのようなモデルで定義された3つの選択肢ではなく、データベースの内容、表示するフォームをしたい:私は何

<!DOCTYPE html> 
<form method="post" action=""> 
<tr><th><label for="id_Category">Category:</label></th><td><select     id="id_Category" name="Category"> 
<option value="" selected="selected">---------</option> 
<option value="AU">Auto</option> 
<option value="BE">Beauty Products</option> 
<option value="GR">Groceries</option> 
</select></td></tr> 
</form> 

をここで理解していないと私はどのようにこの作品を作るのですか?

Categoryテーブルに格納されているすべての二文字のエントリの読み込み可能な選択肢を与えることCATEGORY_CHOICESでタプルがあることに注意してください、私はこの質問でそれらのすべてをリストしないことによって、スペースを節約しています)。

答えて

1

あなたはCategoryモデルを指定する必要があります。

class NewSiteForm(ModelForm): 
    class Meta: 
     model = Category # <-- 
     fields = ['Category'] 
+0

ありがとうございます。しかし、私が 'Site'を指定したのは、ModelFormを使用して' Site'モデルのすべてのフィールドを追加したかったからです。代わりに 'Category'を指定すると、私はそれをやめ、ModelFormは2つのモデルを一度に指定できるようには思えません。これを 'Site'フィールドのModelFormにして、' Category'フィールドに 'CATEGORY_CHOICES'を許可する方法はありますか? – RubyNoob

0

私のモデル構造が悪かったです。 Categoryモデルに別の選択肢を持たせるのは意味がありませんでした。私がやるべきことだった。

1)は、どちらかだけで完全にCategoryモデルを削除し、外部キーのアイデアを放棄、SiteモデルにCategoryフィールドに直接CATEGORY_CHOICESを使用しました。

2)私がCATEGORY_CHOICESに保存していた人間が判読可能な値をCategoryモデルのデータベース値に転送しました。 CATEGORY_CHOICESを削除しました。私は最終的にこれを選択しました。承認済みのようなCategoryに関連する他のフィールドがあるためです。それで、別の「カテゴリ」モデルを持つことは意味があります。

関連する問題