如何在内联字段Django中添加属性?

时间:2017-10-25 14:43:40

标签: javascript python django

当我尝试在内联字段中添加属性时,没有添加任何内容。我想为每个select选择一个相同的类,以便在select change上添加一个javascript事件。

这是我的models.py:

class Conversation(models.Model):
    conversation_name = models.CharField(verbose_name="Nom du conversation", 
max_length=255)
    group = models.ForeignKey(Group, verbose_name="Groupe")

class ConversationMessage(models.Model):
    conversation_title = models.ForeignKey(Conversation, 
                         verbose_name="Conversation")
    from_message = models.ForeignKey(MessageList, verbose_name="De", 
                   related_name="from_message")
    to_message = models.ForeignKey(MessageList, verbose_name="A", 
                 related_name="to_message")

我的admin.py:

class ConversationMessageInline(admin.TabularInline):
    model = ConversationMessage`

class ConversationMessageAdmin(admin.ModelAdmin):
    form = ConversationMessageForm
    list_display = ['conversation_title', 'from_message', 'to_message']

class ConversationAdmin(admin.ModelAdmin):
    form = ConversationForm
    list_display = ['conversation_name']
    inlines = [
        ConversationMessageInline,
    ]

my forms.py:

class ConversationMessageForm(forms.ModelForm):
    model = ConversationMessage
    from_message = forms.ModelChoiceField(MessageList.objects.all(),
                                   widget=forms.Select(attrs=
                                     {"onChange":'refresh()'}))
    class Media:
        js = ('js/forms_event.js',)

class ConversationForm(forms.ModelForm):
    model = Conversation
    class Media:
        js = ('js/forms_event.js',)

my forms_event.js:

function refresh() {
    alert("salut la planete");
}

当我在“添加对话”时,没有添加事件onchange:

enter image description here

2 个答案:

答案 0 :(得分:1)

您只需要覆盖Inline类的默认形式,并将新表单添加到TabularInline类,如下所示:

class ConversationMessageInline(admin.TabularInline):
    model = ConversationMessage
    form = ConversationMessageForm

答案 1 :(得分:0)

我认为混合使用python和javascript是一种不好的做法,所以不要在表单中嵌入脚本。

相反,您可以在.js文件中执行类似的操作:

var from_message_field = document.getElementById('<id of the field>');
from_message_field.addEventListener('change', refresh);