1

我有三个没有分配 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(不是应用程序 url)等。

模型.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 - 目前未使用此表单,请查看视图和 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 功能不工作)。如果我的模型/应用程序设计有问题,我需要知道什么。

谢谢你

4

1 回答 1

0

我也有同样的问题。显然,smart_selects 不能处理带有“to_field”的外键。另外,尝试访问管理页面,看看下拉菜单是否在那里工作。我所做的是完全在测试应用程序中完成教程,查看 smart_selects 是否适用于测试模型,然后插入我的模型以查看它们是否可以。

就我而言,测试模型有效,但我自己的模型没有——但删除“to_field”使其有效。我将阅读源代码,看看是否能找到解决方法。

于 2017-02-05T11:59:16.497 回答