Djangoadminsite(三)InlineModelAdmin

黄舟
풀어 주다: 2016-12-23 17:46:14
원래의
1969명이 탐색했습니다.

InlineModelAdmin

class InlineModelAdmin
class TabularInline
class StackedInline

예를 들어 두 가지 모델이 있습니다:

django.db 가져오기 모델

클래스 작성자(models.Model):
이름 = models.CharField(max_length=100)

클래스 도서(models.Model):
작성자 = models.ForeignKey(저자)
title = models.CharField(max_length=100)

저자 페이지에서 책을 편집하려면:

from django.contrib import admin

class BookInline (admin.TabularInline):
model = Book

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

Django는 InlineModelAdmin의 두 가지 하위 클래스를 제공합니다.

TabularInline
StackedInline
차이점은 사용되는 템플릿에 있습니다.

InlineModelAdmin 옵션

InlineModelAdmin 및 ModelAdmin에 공통적인 옵션은 다음과 같습니다.

form
fieldsets
fields
formfield_overrides
exclude
filter_horizontal
filter_vertical
주문
PRepopulated_fields
get_queryset()
radio_fields
readonly_fields
raw_id_fields
formfield_for_choice_field()
formfield_for_foreignkey()
formfield_for_ 많은()
has_add_permission()
has_change_permission()
has_delete_permission()

추가 옵션은 다음과 같습니다.

InlineModelAdmin.model
인라인에서 사용되는 모델, 필수입니다.

InlineModelAdmin.fk_name
외래 키가 여러 개인 경우 사용되는 모델 이름입니다.

InlineModelAdmin.formset
기본 BaseInlineFormSet.

InlineModelAdmin.form
기본 ModelForm. formset을 생성할 때 inlineformset_factory()에 전달됩니다.

InlineModelAdmin.extra
추가 인라인 수입니다.

InlineModelAdmin.get_extra()도 인라인의 추가 개수를 반환합니다.

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
메타 클래스의 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:
추가 반환 - obj.binarytree_set.count()
추가 반환

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:
                                                                                                  사용 사용 사용   사용 사용              스루 아웃 아웃 스루 오프 's' ‐ ‐ ‐ ‐ ‐ 5
      ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ 5

여러 개의 ForeignKey가 동일한 모델에 연결된 경우


외래 키가 여러 개 있는 경우:

from django.db import models

class Friendship( models. 모델):

to_person = models.ForeignKey(Person, 관련_name="friends")

from_person = models.ForeignKey(Person, 관련_name="from_friends")


그 중 표시 A :

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,
]


다대다 모델 작업

모델 예:

from django.db import models

class Person(models.Model):

name = models.CharField(max_length=128)


클래스 그룹(models.Model):
이름 = models.CharField(max_length=128)
구성원 = models.ManyToManyField(Person, 관련_name='groups')


인라인 표시:

from django.contrib import admin

class MembershipInline(admin.TabularInline):
model = Group.members.through

class PersonAdmin(admin.ModelAdmin):
Inlines = [
Membershipinline,
]

클래스 Groupadmin(admin.modladmin):
Inlines = [
Membershipinline,


제외 = (' ME = mBers' ,)

참고:

먼저 MembershipInline 클래스는 Group.members.through를 가리킵니다. through 속성은 다대다 연결을 관리하는 데이터베이스를 가리킵니다.

둘째, GroupAdmin은 멤버 필드를 제외해야 합니다.

다대다 중간 모델 작업

중간 모델 예를 명시적으로 지정합니다.


django.db에서 모델 가져오기

class Person(models.Model):
name = models.CharField(max_length=128)

class Group(models.Model):
이름 = models.CharField(max_length=128)
구성원 = models.ManyToManyField(Person, through='Membership')

class Membership(models.Model):
사람 = 모델 .ForeignKey(Person )
group = models.ForeignKey(Group)
date_joined = models.DateField()
Invitation_reason = models.CharField(max_length=64)

1단계 :


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

2단계:


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

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

3단계:


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

일반 관계를 인라인으로 사용

인라인 일반적으로 관련 개체 예:


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)

상품 추가/변경 페이지에서 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 ):
모델 = 이미지

class ProductAdmin(admin.ModelAdmin):
inlines = [
ImageInline,
]

admin. site.register(Product , ProductAdmin)


위는 Djangoadminsite의 내용입니다. (3) InlineModelAdmin에 관련된 더 많은 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿