【问题标题】:Django admin site - how to override adding manytomanyfield with + sign?Django 管理站点 - 如何使用 + 符号覆盖添加多字段?
【发布时间】:2014-06-15 01:49:00
【问题描述】:

当单击 + 登录管理站点时,要添加新的多对多字段,会出现一个弹出窗口,并要求您将字段填写到多对多表中。我有一个如下架构:

class RelTypes(models.Model):
    name = models.CharField(max_length=50)

class People(models.Model):
    code = models.CharField(max_length="15", unique=True)
    rel_types = models.ManyToManyField('RelationTypes')

我想在弹出窗口中显示code,用户在将新字段添加到人员模型(在管理站点中)时输入,就在 RelTypes 的名称字段的文本框之前。我怎样才能实现它?有什么想法吗?

【问题讨论】:

    标签: django django-admin many-to-many


    【解决方案1】:

    这应该可以解决问题:

    # models.py
    from django.db import models
    
    class RelationType(models.Model):
        name = models.CharField(max_length=50)
    
    class People(models.Model):
        code = models.CharField(max_length=15, unique=True)
        rel_types = models.ManyToManyField('RelationType')
    
    # admin.py
    from django.contrib.admin.options import ModelAdmin
    
    class RelationTypeAdmin(ModelAdmin):
        class Media:
            js = ('admin/related_type_change_form.js',)
    
    # related_type_change_form.js
    ;(function($) {
        if(window.opener) {
            $(function() {
                $('#content-main').prepend('<p id="code_value"></p>');
                var target_el = $("#code_value");
                var code_el = window.opener.$("#id_code");
                var update_code = function() {
                    target_el.text(code_el.val());
                }
                code_el.on('keyup change', update_code);
                update_code();
            });
        }
    })(django.jQuery);
    

    【讨论】:

    • 更好的名称是:People=Person, rel_types=relation_types。
    猜你喜欢
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 2017-01-01
    • 2011-04-25
    • 2019-05-27
    • 2012-07-05
    • 2017-05-05
    • 2016-11-22
    相关资源
    最近更新 更多