小编The*_*_OP的帖子

Django admin - 内联内联(或者,一次三个模型编辑)

我有一组看起来像这样的模型:

class Page(models.Model):
    title = models.CharField(max_length=255)

class LinkSection(models.Model):
    page = models.ForeignKey(Page)
    title = models.CharField(max_length=255)

class Link(models.Model):
    linksection = models.ForeignKey(LinkSection)
    text = models.CharField(max_length=255)
    url = models.URLField()
Run Code Online (Sandbox Code Playgroud)

和一个看起来像这样的admin.py:

class LinkInline(admin.TabularInline):
    model = Link
class LinkSectionInline(admin.TabularInline):
    model = LinkSection
    inlines = [ LinkInline, ]
class PageAdmin(admin.ModelAdmin):
    inlines = [ LinkSectionInline, ]
Run Code Online (Sandbox Code Playgroud)

我的目标是获得一个管理界面,让我可以在一个页面上编辑所有内容.这个模型结构的最终结果是生成的东西生成一个看起来或多或少的视图+模板:

<h1>{{page.title}}</h1>
{% for ls in page.linksection_set.objects.all %}
<div>
    <h2>{{ls.title}}</h2>
    <ul>
         {% for l in ls.link_set.objects.all %}
        <li><a href="{{l.url}}">{{l.title}}</a></li>
         {% endfor %}
    </ul>
</div>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

据我所知,我知道Django管理员中的inline-in-an-inline技巧失败了.有谁知道允许这种三级模型编辑的方法?提前致谢.

python django django-models django-admin inlines

51
推荐指数
2
解决办法
3万
查看次数

为什么mysql忽略了在这个简单的连接查询中使用的"明显"键?

我有我认为简单的查询,但它需要"永远".我对SQL优化不太满意,所以我想我可以问你们.

这是查询,使用EXPLAIN:

EXPLAIN SELECT *
    FROM `firms_firmphonenumber`
    INNER JOIN `firms_location` ON (
        `firms_firmphonenumber`.`location_id` = `firms_location`.`id`
    )
    ORDER BY
         `firms_location`.`name_en` ASC,
         `firms_firmphonenumber`.`location_id` ASC LIMIT 100;
Run Code Online (Sandbox Code Playgroud)

结果:

id, select_type,       table,           type,  possible_keys,                     key,                           key_len, ref, rows, Extra
1,  'SIMPLE',     'firms_location',    'ALL',  'PRIMARY',                        '',                            '',             '', 73030, 'Using temporary; Using filesort'
1,  'SIMPLE', 'firms_firmphonenumber', 'ref', 'firms_firmphonenumber_firm_id', 'firms_firmphonenumber_firm_id', '4', 'citiadmin.firms_location.id', 1, ''
Run Code Online (Sandbox Code Playgroud)

firm_location上的键:

Keyname                 Type    Unique  Packed  Field   Cardinality
PRIMARY                    BTREE    Yes     No      id      65818
firms_location_name_en     BTREE    No      No      name_en 65818
Run Code Online (Sandbox Code Playgroud)

firm_firmphonenumber上的键:

Keyname                     Type …
Run Code Online (Sandbox Code Playgroud)

mysql indexing django-models

5
推荐指数
1
解决办法
489
查看次数

标签 统计

django-models ×2

django ×1

django-admin ×1

indexing ×1

inlines ×1

mysql ×1

python ×1