我有三个没有分配pk的mysql表,表A包含唯一名称,B包含不同的名称和值1(比表1长),表C是名称的值,值1和值2(比表长) B)。我正在努力为这些关系定义模型和形式,以创建一个表单(Django表单或html选择表单)来执行django smart_selects承诺要做的事情。 https://github.com/digi604/django-smart-selects,我已经在网上跟踪了文档和许多答案。但我的应用仍然无法正常工作。这是我的代码: 此帖子上可能存在拼写错误或间距问题,但这些不是我的应用中出错的原因。 我使用的是python 2.7,django 1,10,0 smart_selects被添加到设置,项目URL(不是app url)等
models.py
class Names(models.Model):
name = models.CharField(max_length=150, unique=True)
class Meta:
db_table = 'A'
class Foo(models.Model):
Name = models.ForeignKey(Names, to_field = 'name', db_column='name')# need to assign db_column or get error Name_id in fieldlist, it is possible that “to_field” is not needed here. But I am not sure
Val1 = models.BigIntegerField(blank=True, null=True)
class Meta:
db_table = 'B'
class Foo2(models.Model):
name = models.ForeignKey(Names, db_column='name', to_field="name", related_name = 'name_')
VAL1 = ChainedForeignKey(Foo, chained_field="name", chained_model_field="Name", db_column='val1')#again, need to define db_column name or get error VAL1_id not in field list
class Meta:
db_table = 'C'
forms.py-目前不使用此表单,请参阅view和html。
class SearchForm(ModelForm):
class Meta:
model = Foo2
fields = '__all__'
#The form left like is will render empty select boxes. I have to define
def __init__(self, *args, **kwargs):
super(SearchForm, self).__init__(*args, **kwargs)
self.fields['name'] = forms.ModelChoiceField(Foo2.objects.all().values_list('name', flat=True))
#other form lines removed.
和view.py
def index(request, name):
value = Foo2.objects.all().values('names', 'VAL1')
return render(request, 'index.html', {'form':value})
HTML
<form action="" method="POST">{% csrf_token %}
<h3>Filters</h3>
{% if form %}
<select>
{% for co in form %}
<option value="{{ co.names }}">{{ co.names }}</option>
{% endfor %}
</select>
<br>
<select>
{% for co in form %}
<option value="{{ co.VAL1 }}">{{ co.VAL1 }}</option>
{% endfor %}
</select>
{% endif %}
<br>
<input type="submit" value="Submit" class="submit" name="submit">
</form>
编写代码后,我运行了:
Python manage.py makemigrations app_name
Python manage.py migrate --fake app_name
应用程序有效,但VAL1选择框未过滤(smart_select功能不起作用)。如果我的模型/应用程序设计有问题,我需要知道。
谢谢
答案 0 :(得分:0)
我有同样的问题。显然,smart_selects无法使用'to_field'处理ForeignKeys。此外,尝试访问管理页面,看看下拉菜单是否在那里工作。我所做的是在测试应用程序中完成教程,看看smart_selects是否适用于测试模型,然后插入我的模型以查看它们是否会。
在我的情况下,测试模型有效但我自己的模型没有 - 但删除'to_field'使它工作。我将阅读源代码,看看我是否能找到解决方法。