1

У меня есть три таблицы mysql без назначенных pk, таблица 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 приложения) и т.д.django smart_select организация приложения

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 -не в настоящее время используя эту форму, см. просмотр и 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

У меня такая же проблема. По-видимому, smart_selects не может обрабатывать ForeignKeys с 'to_field'. Кроме того, попробуйте получить доступ к странице администрирования и посмотрите, работают ли выпадающие меню. То, что я сделал, это сделать учебник точно в тестовом приложении, посмотреть, работает ли smart_selects для тестовых моделей, а затем подключить мои модели, чтобы посмотреть, будут ли они.

В моем случае тестовые модели работали, но мои собственные модели не делали - но удаление «to_field» заставило его работать. Я буду читать исходный код и посмотреть, могу ли я найти обходной путь.

+0

Вместо использования ForeignKey (to_field = name) вы должны установить 'name' как первичный ключ в models.py. Пример: 'name = models.CharField (max_length = 3, unique = True, primary_key = True)'. Это решило это для меня. – irene