在SQL或Django ORM中,有一对多的常规方法是什么?

Jim*_*oll 7 sql django

假设我想要一个项目,以及一对多的待办事项,并想要任意重新订购待办事项?

在过去,我添加了一个带编号的订单字段,当有人想要更改订单时,必须使用新的订单号更新所有商品.这可能是最糟糕的方法,因为它不是原子的,需要多次更新.

我注意到Django有一个多值的CommaSeparatedIntegerField,它可以通过将订购的密钥存储在项目表的一个字段中的待办事项表中的项目来包含订单.

我考虑过一个杜威十进制系统,如果我想把项目3放在1和2之间,我会把它的订单号改为1.5.

有些东西告诉我,虽然我有一个更容易的选择...

你如何命令一对多的关系?

Pet*_*ell 5

我讨厌这个问题......我一直都遇到这个问题.

对于我最近的Django网站,我们有一份包含N篇文章的时事通讯,当然,订单很重要.我将默认订单指定为升序Article.id,但如果以"正确"顺序以外的其他方式输入文章,则会失败.

在Newsletter change_form.html页面上,我使用Interface插件(http://interface.eyecon.ro/)添加了一些jQuery魔法.我显示相关文章的标题,用户可以随意拖动它们.有一个onChange处理程序可以重新计算article_order字段中的Article.id.

享受,
彼得

对于app = content,model = Newsletter,以下内容位于templates/admin/content/newslettter/change_form.html中

{% extends 'admin/change_form.html' %}

{% block form_top %}{% endblock %}
{% block extrahead %}{{ block.super }}
<script type="text/javascript" src="/media/js/jquery.js"></script>
<script type="text/javascript" src="/media/js/interface.js"></script>
<script>
$(document).ready(
    function () {
        $('ol.articles').Sortable(
            {
                accept :        'sortableitem',
                helperclass :   'sorthelper',
                activeclass :   'sortableactive',
                hoverclass :    'sortablehover',
                opacity:        0.8,
                fx:             200,
                axis:           'vertically',
                opacity:        0.4,
                revert:         true,
                trim:           'art_',
                onchange:
                    function(list){
                        var arts = list[0].o[list[0].id];
                        var vals = new Array();
                        var a;
                        for (a in arts) {
                            vals[a] = arts[a].replace(/article./, '');
                        }
                        $('#id_article_order').attr('value', vals.join(','));
                    }
            });
    }
);
</script>
{% endblock %}

{% block after_related_objects %}
{% if original.articles %}
<style>
.sortableitem {
    cursor:move;
    width: 300px;
    list-style-type: none;
    }
</style>

<h4>Associated Articles</h4>
<ol class="articles" id="article_list">
{% for art in original.articles %}
    <li id="article.{{art.id}}" class="sortableitem">{{art.title}}</li>

{% endfor %}
</ol>
{% endif %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)