Django admin site(三)InlineModelAdmin
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的更多相关文章
- Django Admin site 显示问题
Django Admin site 显示问题 今天配置了一下Django admin site,可是admin site的显示有一些问题,当我打开源码.訪问里面的admin 的css 文件时候,htt ...
- Django admin site应用
django自带的admin后台管理,可以实现对数据库表的增删改查,用起来十分方便.其使用和配置主要分为三个步骤: 1,创建超级用户 需要创建超级用户来登陆admin后台系统,在命令行中输入 pyth ...
- Django admin site(一)ModelAdmin Options
Admin管理界面是django的杀手级应用.它读取你模式中的元数据,然后提供给你一个强大而且可以使用的界面,网站管理者可以用它立即向网站中添加内容. 要使用admin,可以按照下面的步骤: 将'dj ...
- django admin site (三)
1.自定义模板设置: ModelAdmin. add_form_template Path to a custom template, used by add_view(). ModelAdmin. ...
- Django admin site(二)ModelAdmin methods
ModelAdmin methods save_model(request, obj, form, change) 此方法为admin界面用户保存model实例时的行为.request为HttpReq ...
- django admin site配置(二)
1. ModelAdmin.inlines 将有外键的子类包含进视图 ,实例: class Author(models.Model): name = models.CharField(max_leng ...
- Django admin 权威指南(一)
版本: Django 1.10 此部分由官方文档<6.5.1 The Django admin site>翻译而来. 6.5.1.1 概览 默认情况下,使用startproject的时候, ...
- django搭建web (三) admin.py -- 待续
demo 关于模型myQuestion,myAnswer将在后述博客提及 # -*- coding: utf-8 -*- from __future__ import unicode_literals ...
- Django实现自定义template页面并在admin site的app模块中加入自定义跳转链接
在文章 Django实现自定义template页面并在admin site的app模块中加入自定义跳转链接(一) 中我们成功的为/feedback/feedback_stats/路径自定义了使用tem ...
随机推荐
- Linux下C程序插入执行shell脚本
1.system(执行shell命令) 相关函数 fork,execve,waitpid,popen表头文件 #include<stdlib.h>定义函数 int system(const ...
- linux c 验证登录密码
#define _XOPEN_SOURCE #include <stdio.h> #include <unistd.h> int main(int argc, char *ar ...
- java 泛型通配符 extends, super
引自:http://sharewind.iteye.com/blog/1622164 关键字说明 ? 通配符类型 <? extends T> 表示类型的上界,表示参数化类型的可能是T 或是 ...
- 开发中/listfile.jsp(11,31) quote symbol expected 这个错误
可能是因为11行33列,少了一个引号.
- 常用汉字的Unicode码表
\u96d5\u864e\u7684\u4e00\u4e86\u662f\u6211\u4e0d\u5728\u4eba\u4eec\u6709\u6765\u4ed6\u8fd9\u4e0a\u77 ...
- Careercup - Facebook面试题 - 6685828805820416
2014-05-02 02:33 题目链接 原题: Given the following by grid ,): , , , , , , , , null we need to find ,) an ...
- 视频FMS服务器带宽成本分析
一.现状 调查了一下,主要有两种主流方式,WebRTC或者Flash. 1. WebRTC(不支持IE浏览器,已排除):网页实时通信(英语:Web Real-Time Communication)的缩 ...
- BZOJ 2763: [JLOI2011]飞行路线 spfa dp
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=2763 题解: d[x][kk]表示从s到x用了kk次免费机会的最少花费. 代码: #in ...
- 【转载】Hadoop历史服务器详解
免责声明: 本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除. 原文作者:过往记忆(http://www.iteblog.com/) 原文地址: ...
- 剑指offer--面试题13
题目:以O(1)的时间复杂度删除单链表中的某个节点 自己所写代码如下: //以O(1)时间删除链表节点 //要求:单向链表,头指针,待删节点指针 //链表节点 struct ListNode { in ...