首頁 >後端開發 >Python教學 >Djangoadminsite(三)InlineModelAdmin

Djangoadminsite(三)InlineModelAdmin

黄舟
黄舟原創
2016-12-23 17:46:141984瀏覽

InlineModelAdmin

class InlineModelAdmin
class TabularInline
class StackedInline

舉例,有兩個Model:

from django.db import mod class. Field(max_length=100)

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


如果想在Authorlengthromdm 集

class BookInline(admin.TabularInline):

   model = Book


class AuthorAdmin(admin.ModelAdmin):
   inlines = [
 提供了兩個InlineModelAdmin的子類別:

TabularInline
StackedInline
差別在於使用的範本。
InlineModelAdmin和ModelAdmin共通的options有:

form

fieldsets

fields

formfield_overspops
form
fieldsets

fields

formfield_overss_p _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有:

語,ModelAdmin.Indelline,必需的使用。

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​​ans.   model = BinaryTree


   def get_extra(self, request, obj=None, **kwargs):

       extra = 2

 set.count()
       return extra


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

class BinaryTreeAdmin(admin.TabularInline):
   model = BinaryTree

   def get_max_num(self, request, obwar ):

       if obj.parent :

           return max_num - 5
       return max_num


InlineModelAdmin.get_min_num(request, objgs.

多個ForeignKey鏈向同一個Model的情況

如果有多個foreign keys:

from django.db import models

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


展示其中一個:

from django.contrib
展示其中一個:

from django.contrib import adminmyship. Inline) :
   model = Friendship

   fk_name = "to_person"

class PersonAdmin(admin.ModelAdmin):

   inlines = [

   orking 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):🠎 models .ManyToManyField(Person, related_name='groups')



inlines展示:

from django.contrib import admin

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

class GroupAdmin(admin .ModelAdmin):
   inlines = [
       MembershipInline,
   ]
   exclude = ('members',)

   exclude = ('members',)

The through attribute指向管理the many- to-many關係的資料庫. 

第二,, the GroupAdmin 必須排除the members欄位.

Working with many-to-many intermediary models

語 djmodel

class Person(models.Model):

   name = models.CharField(max_length=128)

class Group(models.Model):

   name = models.Fielield(max_length Person, through='Membership')


class Membership(models.Model):
   person = models.ForeignKey(Person)
   group = models.ForeignKey(Group)
  date_Key) models.CharField(max_length =64)


第一步:

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

class GroupAdmin(admin.ModelAdmin):

   inlines = (MembershipInline,)

第三步:

admin.site..Adm,

Using generic relations as an inline

一個inline with generically related objects範例:


from django.db import models
from django.contrib.contentcontentsfields Keyl.   image = models.ImageField(upload_to="images")
   content_type = models.ForeignKey(ContentType)
   object_id = models.PositiveIntegerField()
 object_id = models.PositiveIntegerField()

 object_id = models.PositiveIntegerField()

 object_id = models.PositiveIntegerField()

 object_id = models.PositiveIntegerField()

 object_id = models.PositiveIntegerField()
 object_id = models.PositiveIntegerField()
 object_id = models.PositiveIntegerField()​​  object_id = models.PositiveIntegerField() Product(models.Model):

   name = models.CharField(max_length=100)

如果想在Product add/change頁面上編輯Image實例,可以使用GenericTabularInline或GenericStackedInline:

. import GenericTabularInline

from myproject.myapp.models import Image, Product

class ImageInline(GenericTabularInline):
   ¦       ImageInline,
   ]

admin.site .register(Product, ProductAdmin)


 以上就是Djangoadminsite(三)InlineModelAdmin的內容,更多相關內容請關注PHP中文網(www.php.cn)!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn