InlineModelAdmin

class InlineModelAdmin
class TabularInline
class StackedInline

举例,有两个Model:

from django.db import models

class Author(models.Model):
name = models.CharField(max_length=100) class Book(models.Model):
author = models.ForeignKey(Author)
title = models.CharField(max_length=100)

如果想在Author页面上编辑book:

from django.contrib import admin

class BookInline(admin.TabularInline):
model = Book class AuthorAdmin(admin.ModelAdmin):
inlines = [
BookInline,
]

Django提供了两个InlineModelAdmin的子类:

TabularInline
StackedInline
区别在于使用的模板。

InlineModelAdmin options选项

InlineModelAdmin和ModelAdmin共通的options有:

form
fieldsets
fields
formfield_overrides
exclude
filter_horizontal
filter_vertical
ordering
prepopulated_fields
get_queryset()
radio_fields
readonly_fields
raw_id_fields
formfield_for_choice_field()
formfield_for_foreignkey()
formfield_for_manytomany()
has_add_permission()
has_change_permission()
has_delete_permission()

额外增加的options有:

InlineModelAdmin.model
inline使用的model,必需。

InlineModelAdmin.fk_name
model的name,当有多个外键时使用。

InlineModelAdmin.formset
缺省BaseInlineFormSet。

InlineModelAdmin.form
缺省ModelForm。当创建formset时传递给inlineformset_factory()。

InlineModelAdmin.extra
inline的额外数目。

InlineModelAdmin.get_extra()也返回inline的额外数目。

InlineModelAdmin.max_num
可展示得最大数目。

InlineModelAdmin.get_max_num()也返回此数字。

InlineModelAdmin.min_num
可展示的最小数目。

InlineModelAdmin.get_min_num()也返回此数目。

InlineModelAdmin.raw_id_fields
同ModelAdmin。

class BookInline(admin.TabularInline):
model = Book
raw_id_fields = ("pages",)

InlineModelAdmin.template
使用的模板。

InlineModelAdmin.verbose_name
覆盖meta class中的verbose_name。

InlineModelAdmin.verbose_name_plural
同上

InlineModelAdmin.can_delete
默认为True。

InlineModelAdmin.get_formset(request, obj=None, **kwargs)
参考ModelAdmin.get_formsets_with_inlines.

InlineModelAdmin.get_extra(request, obj=None, **kwargs)

class BinaryTreeAdmin(admin.TabularInline):
model = BinaryTree def get_extra(self, request, obj=None, **kwargs):
extra = 2
if obj:
return extra - obj.binarytree_set.count()
return extra

InlineModelAdmin.get_max_num(request, obj=None, **kwargs)

class BinaryTreeAdmin(admin.TabularInline):
model = BinaryTree def get_max_num(self, request, obj=None, **kwargs):
max_num = 10
if obj.parent:
return max_num - 5
return max_num

InlineModelAdmin.get_min_num(request, obj=None, **kwargs)
见上。

多个 ForeignKey链向同一个Model的情况

如果有多个foreign keys:

from django.db import models

class Friendship(models.Model):
to_person = models.ForeignKey(Person, related_name="friends")
from_person = models.ForeignKey(Person, related_name="from_friends")

展示其中一个:

from django.contrib import admin
from myapp.models import Friendship class FriendshipInline(admin.TabularInline):
model = Friendship
fk_name = "to_person" class PersonAdmin(admin.ModelAdmin):
inlines = [
FriendshipInline,
]

Working with many-to-many models

model例子:

from django.db import models

class Person(models.Model):
name = models.CharField(max_length=128) class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, related_name='groups')

inlines展示:

from django.contrib import admin

class MembershipInline(admin.TabularInline):
model = Group.members.through class PersonAdmin(admin.ModelAdmin):
inlines = [
MembershipInline,
] class GroupAdmin(admin.ModelAdmin):
inlines = [
MembershipInline,
]
exclude = ('members',)

Note:

第一 , the MembershipInline类指向Group.members.through. The through attribute指向管理the many-to-many关系的数据库.

第二,, the GroupAdmin 必须排除the members字段.

Working with many-to-many intermediary models

明确指出中间model的例子:

from django.db import models

class Person(models.Model):
name = models.CharField(max_length=128) class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership') class Membership(models.Model):
person = models.ForeignKey(Person)
group = models.ForeignKey(Group)
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)

第一步:

class MembershipInline(admin.TabularInline):
model = Membership
extra = 1

第二步:

class PersonAdmin(admin.ModelAdmin):
inlines = (MembershipInline,) class GroupAdmin(admin.ModelAdmin):
inlines = (MembershipInline,)

第三步:

admin.site.register(Person, PersonAdmin)
admin.site.register(Group, GroupAdmin)

Using generic relations as an inline

一个inline with generically related objects例子:

from django.db import models
from django.contrib.contenttypes.fields import GenericForeignKey class Image(models.Model):
image = models.ImageField(upload_to="images")
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey("content_type", "object_id") class Product(models.Model):
name = models.CharField(max_length=100)

如果想在Product add/change页面上编辑Image实例,可以使用GenericTabularInline或GenericStackedInline:

from django.contrib import admin
from django.contrib.contenttypes.admin import GenericTabularInline from myproject.myapp.models import Image, Product class ImageInline(GenericTabularInline):
model = Image class ProductAdmin(admin.ModelAdmin):
inlines = [
ImageInline,
] admin.site.register(Product, ProductAdmin)

  

Django admin site(三)InlineModelAdmin的更多相关文章

  1. Django Admin site 显示问题

    Django Admin site 显示问题 今天配置了一下Django admin site,可是admin site的显示有一些问题,当我打开源码.訪问里面的admin 的css 文件时候,htt ...

  2. Django admin site应用

    django自带的admin后台管理,可以实现对数据库表的增删改查,用起来十分方便.其使用和配置主要分为三个步骤: 1,创建超级用户 需要创建超级用户来登陆admin后台系统,在命令行中输入 pyth ...

  3. Django admin site(一)ModelAdmin Options

    Admin管理界面是django的杀手级应用.它读取你模式中的元数据,然后提供给你一个强大而且可以使用的界面,网站管理者可以用它立即向网站中添加内容. 要使用admin,可以按照下面的步骤: 将'dj ...

  4. django admin site (三)

    1.自定义模板设置: ModelAdmin. add_form_template Path to a custom template, used by add_view(). ModelAdmin. ...

  5. Django admin site(二)ModelAdmin methods

    ModelAdmin methods save_model(request, obj, form, change) 此方法为admin界面用户保存model实例时的行为.request为HttpReq ...

  6. django admin site配置(二)

    1. ModelAdmin.inlines 将有外键的子类包含进视图 ,实例: class Author(models.Model): name = models.CharField(max_leng ...

  7. Django admin 权威指南(一)

    版本: Django 1.10 此部分由官方文档<6.5.1 The Django admin site>翻译而来. 6.5.1.1 概览 默认情况下,使用startproject的时候, ...

  8. django搭建web (三) admin.py -- 待续

    demo 关于模型myQuestion,myAnswer将在后述博客提及 # -*- coding: utf-8 -*- from __future__ import unicode_literals ...

  9. Django实现自定义template页面并在admin site的app模块中加入自定义跳转链接

    在文章 Django实现自定义template页面并在admin site的app模块中加入自定义跳转链接(一) 中我们成功的为/feedback/feedback_stats/路径自定义了使用tem ...

随机推荐

  1. PySide 简易教程<二>-------工欲善其事,必先利其器

    OK , 在Linux的开发环境下,对于我们的简短的PySide程序而言,不需要使用QtCreator,使用文本编辑器.之所以,使用文本编辑器,是因为小应用代码量很少,更重要的是一行行的写可以加深我们 ...

  2. YARN环境搭建 之 一:CentOS7.0系统配置

    一.我缘何选择CentOS7.0 14年7月7日17:39:42发布了CentOS 7.0.1406正式版,我曾使用过多款Linux,对于Hadoop2.X/YARN的环境配置缘何选择CentOS7. ...

  3. eclipse下mysql编程

    mysql -uroot -p 密码 1:如果/usr/include/mysql路径下不存在头文件请: apt-get install libmysql++安装开发包 2:程序中添加头文件<m ...

  4. android实现可拖动按钮

    功能:在Android中实现可拖动按钮,同时实现按钮的点击功能 相关问题: 按钮拖动的界限限定. 按钮单击和拖动之间的冲突. 在界面未显示之前,获得View的高/宽. 问题描述: 如果不为按钮的拖动范 ...

  5. 关于表 datatable的条件查询

    关于表 datatable的条件查询 从数据库中获得一个datatable dt .里面有很多的死的数据.然后,我就是要在这个表中来按条件查询,例如 dt中有个列叫"palte", ...

  6. 玩转SmartQQ之登录

    SmartQQ是腾讯新出的一个WebQQ,登录地址是:http://w.qq.com/,目前之前的WebQQ可以继续使用,登录地址:http://web2.qq.com/webqq.html,Smar ...

  7. [搜片神器]winform程序自己如何更新自己的方法代码

    DHT抓取程序开源地址:https://github.com/h31h31/H31DHTDEMO 数据处理程序开源地址:https://github.com/h31h31/H31DHTMgr 国外测试 ...

  8. c++ 从标注输入流读取行

    #include <string.h> #include <iostream> #include <vector> #include <stdio.h> ...

  9. map中的erase成员函数用法

    转载于 http://www.cnblogs.com/graphics/archive/2010/07/05/1771110.html  http://hi.baidu.com/sdkinger/it ...

  10. 腾讯QQ企业邮箱在ruby on rails 框架中的mailer配置

    在编写ruby on rails程序时,我们可能会需要用到发送邮件的程序,如果使用gmail进行smtp发送一般问题不大,但很多企业使用的是腾讯QQ企业邮箱.使用该邮箱进行链接时出现各种错误,goog ...