Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ModelForm显示ForeignKey表值,而不是选项_Python_Django_Django Models_Django Forms_Modelform - Fatal编程技术网

Python ModelForm显示ForeignKey表值,而不是选项

Python ModelForm显示ForeignKey表值,而不是选项,python,django,django-models,django-forms,modelform,Python,Django,Django Models,Django Forms,Modelform,我正在创建一个Django应用程序,其中每个站点都有一个类别,从一系列可能的类别中进行选择。所以我有两个模型:站点,和类别 我想要站点和类别模型之间的多对一关系。Category表包含不同类别的选择,每个Site记录将有一个外键引用其中一个类别 models.py: from django.db import models from django.utils.encoding import python_2_unicode_compatible @python_2_unicode_compati

我正在创建一个Django应用程序,其中每个站点都有一个类别,从一系列可能的类别中进行选择。所以我有两个模型:
站点
,和
类别

我想要
站点
类别
模型之间的多对一关系。
Category
表包含不同类别的选择,每个
Site
记录将有一个外键引用其中一个类别

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:

<!DOCTYPE html>
<form method="post" action="">
{{ form}}
</form>

{{form}}
Newsite.html为我提供了一个类别下拉列表,其中列出了已存储在类别数据库中的值,而不是列出类别模型中定义的选项元组的内容。所以我得到了这个:

<!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>

类别:
---------
金
文学士
是
博
酸碱度
一氧化碳
科科斯群岛
CB
总工程师
反恐精英
加利福尼亚州
每个
欧共体
FA
GR
哈
他
汞
在里面
日本脑炎
书信电报
太太
亩
医疗保险
属于
欧点
个人计算机
嘘
所以
服务提供商
到
泰
数码摄像
氯
华盛顿州
WI
我希望表单只显示模型中定义的三个选项,而不是数据库的内容,如下所示:

<!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\u CHOICES
中会有一个元组,为存储在
CATEGORY
表中的每两个字母条目提供一个可读的选项,但我没有在这个问题中列出所有条目,这节省了空间)

您需要指定
类别
型号:

class NewSiteForm(ModelForm):
    class Meta:
        model = Category # <--
        fields = ['Category']
class新闻站点表单(ModelForm):
类元:

我的模型结构不好。对于
类别
模型,单独选择是没有意义的。我应该做的是:

1) 或者干脆删除了
类别
模型,并将
类别_选项
直接用于
站点
模型中的
类别
字段,放弃了外键的概念


2) 将我存储在
CATEGORY\u CHOICES
中的人类可读值传输到
CATEGORY
模型的数据库值中。并删除了
类别选项
。我最终选择了这个,因为还有其他与
类别相关的字段,比如“Approved”。因此,有一个单独的“类别”模型仍然是有意义的。

谢谢,这是可行的-但我指定
站点
的原因是我想使用ModelForm为
站点
模型添加所有字段。相反,指定
Category
会阻止我这样做,而ModelForm似乎不想让我同时指定两个模型。如何使其成为
站点
字段的模型表单,同时也允许
类别
字段的
类别选项