Как использовать django-autocomplete-light для возврата внешнего ключа с допустимым значением в форме?

Я новичок в django. Я написал форму сообщения для своего проекта и хочу использовать автозаполнение для выбора внешнего ключа с полем Node в форме сообщения Line. Я успешно применил django-autocomplete-light для возврата внешнего ключа (node_name), но форма была недействительной, когда я ее опубликовал. Я догадался, что внешний ключ представляет собой число node_id, но автозаполнение вернуло текст ( имя_узла). Как я могу исправить это с помощью приложения django-autocomplete-light? Спасибо.

модели.ру:

class Node(models.Model):
    node_name = models.CharField(max_length=255)   

    def __unicode__(self):
        return self.node_name


class Line(models.Model):
    node = models.ForeignKey(Node,on_delete=models.PROTECT)
    line_code = models.CharField(max_length=100)

    def __unicode__(self):
        return self.line_code

формы.py:

from django import forms
import autocomplete_light
from .models import Line,Node

class LineForm(forms.ModelForm):
    class Meta:
       model = Line
       autocomplete_fields = ('node')

       widgets = {
            'node': autocomplete_light.TextWidget('NodeAutocomplete'),
       }        

class NodeForm(forms.ModelForm):
    class Meta:
        model = Node

autocomplete_light_registry.py:

import autocomplete_light.shortcuts as al
from models import Node,Line
al.register(Node,

    search_fields=['node_name'],
    attrs={

        'data-autocomplete-minimum-characters': 1,
    },

    widget_attrs={
        'data-widget-maximum-values': 4,        
        'class': 'modern-style',
    },
)

person alex chen    schedule 19.10.2015    source источник
comment
Я заметил одну вещь: autocomplete_fields = ('node') должно быть autocomplete_fields = ('node', ) - кортеж   -  person karthikr    schedule 19.10.2015
comment
Спасибо, что напомнили, да, это кортеж. Я изменил его, но это не может решить проблему.   -  person alex chen    schedule 19.10.2015


Ответы (1)


Я решил свою проблему. Что-то не так в моем autocomplete_light_registry.py. Теперь я изменил его.

import autocomplete_light.shortcuts as al
from models import Node,Line

# This will generate a LineAutocomplete class
al.register(Line,
    # Just like in ModelAdmin.search_fields
    search_fields=['node'],
    attrs={
        # This will set the input placeholder attribute:
        'placeholder': '',
        # This will set the yourlabs.Autocomplete.minimumCharacters
        # options, the naming conversion is handled by jQuery
        'data-autocomplete-minimum-characters': 1,
    },
    # This will set the data-widget-maximum-values attribute on the
    # widget container element, and will be set to
    # yourlabs.Widget.maximumValues (jQuery handles the naming
    # conversion).
    widget_attrs={
        'data-widget-maximum-values': 4,
        # Enable modern-style widget !
        'class':    'modern-style',
    },
)

al.register(Node,
    # Just like in ModelAdmin.search_fields
    search_fields=['node_name'],
    attrs={
        # This will set the input placeholder attribute:
        'placeholder': '',
        # This will set the yourlabs.Autocomplete.minimumCharacters
        # options, the naming conversion is handled by jQuery
        'data-autocomplete-minimum-characters': 1,
    },
    # This will set the data-widget-maximum-values attribute on the
    # widget container element, and will be set to
    # yourlabs.Widget.maximumValues (jQuery handles the naming
    # conversion).
    widget_attrs={
        'data-widget-maximum-values': 4,
        # Enable modern-style widget !
        'class': 'modern-style',
    },
)
person alex chen    schedule 08.12.2015