Heim > Artikel > Backend-Entwicklung > Djangoadminsite(三)InlineModelAdmin
InlineModelAdmin
Klasse InlineModelAdmin
Klasse TabularInline
Klasse StackedInline
Zum Beispiel gibt es zwei Modelle:
aus django.db Importmodelle
Klassenautor(models.Model):
name = models.CharField(max_length=100)
Klassenbuch(models.Model):
autor = models.ForeignKey(Autor)
title = models.CharField(max_length=100)
Wenn Sie das Buch auf der Autorenseite bearbeiten möchten:
vom django.contrib-Importadministrator
class BookInline (admin.TabularInline):
model = Book
class AuthorAdmin(admin.ModelAdmin):
inlines = [
BookInline,
]
Django stellt zwei Unterklassen von InlineModelAdmin bereit:
TabularInline
StackedInline
Der Unterschied liegt in der verwendeten Vorlage.
InlineModelAdmin-Optionen
Die für InlineModelAdmin und ModelAdmin gemeinsamen Optionen sind:
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()
Die zusätzlichen Optionen sind:
InlineModelAdmin.model
Das in Inline verwendete Modell, erforderlich.
InlineModelAdmin.fk_name
Der Name des Modells, der verwendet wird, wenn mehrere Fremdschlüssel vorhanden sind.
InlineModelAdmin.formset
Standard-BaseInlineFormSet.
InlineModelAdmin.form
Standard-ModelForm. Wird beim Erstellen des Formularsatzes an inlineformset_factory() übergeben.
InlineModelAdmin.extra
Zusätzliche Anzahl von Inline.
InlineModelAdmin.get_extra() gibt auch die zusätzliche Anzahl von Inline zurück.
InlineModelAdmin.max_num
Die maximale Anzahl, die angezeigt werden kann.
InlineModelAdmin.get_max_num() gibt diese Zahl ebenfalls zurück.
InlineModelAdmin.min_num
Die Mindestanzahl, die angezeigt werden kann.
InlineModelAdmin.get_min_num() gibt diese Zahl ebenfalls zurück.
InlineModelAdmin.raw_id_fields
Gleiche wie ModelAdmin.
class BookInline(admin.TabularInline):
model = Book
raw_id_fields = ("pages")
InlineModelAdmin.template
Die verwendete Vorlage.
InlineModelAdmin.verbose_name
Überschreibt verbose_name in der Metaklasse.
InlineModelAdmin.verbose_name_plural
Das Gleiche wie oben
InlineModelAdmin.can_delete
Der Standardwert ist True.
InlineModelAdmin.get_formset(request, obj=None, **kwargs)
Siehe 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:
extra zurückgeben - obj.binarytree_set.count()
extra zurückgeben
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:
durch aus aus aus durch aus ' s ' ‐ ‐ ‐ ‐ ‐ ‐ 5
‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ 5
Wenn mehrere Fremdschlüssel vorhanden sind:
Modelle aus django.db importieren
Klasse Friendship( Modelle. Modell):
to_person = models.ForeignKey(Person, related_name="friends") from_person = models.ForeignKey(Person, related_name="from_friends")
Darunter A :
von django.contrib import admin
model = Friendship
fk_name = "to_person "
class PersonAdmin(admin.ModelAdmin):
inlines = [
FriendshipInline,
]
Arbeiten mit Many-to-many-Modellen
Modellbeispiel:
aus django.db Modelle importieren
Klasse Person(models.Model):
name = models.CharField(max_length=128)
Klasse Group(models.Model):
name = models.CharField(max_length=128)
member = models.ManyToManyField(Person, related_name='groups')
Inline-Anzeige:
von django.contrib import admin
class MembershipInline(admin.TabularInline):
model = Group.members.through
class PersonAdmin(admin.ModelAdmin):
Inlines = [
Membershipinline,
]
Class Groupadmin (admin.modladmin):
Inlines = [
Membershipinline,
Exclude = (' ME = mBers' ,)
Zweitens muss der GroupAdmin das Mitgliederfeld ausschließen.Arbeiten mit Viele-zu-Viele-ZwischenmodellenGeben Sie explizit das Beispiel für das Zwischenmodell an:
aus django.db Modelle importieren
Klasse Person(models.Model):
name = models.CharField(max_length=128)
Klassengruppe(models.Model):
name = models.CharField(max_length=128)
member = 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)
aus django.db Modelle importieren
aus django.contrib.contenttypes.fields importieren GenericForeignKey
Klasse 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)
von django.contrib import admin
von django.contrib.contenttypes.admin import GenericTabularInline
von myproject.myapp.models import Image, Product
class ImageInline(GenericTabularInline ):
model = Image
class ProductAdmin(admin.ModelAdmin):
inlines = [
ImageInline,
]
admin. site.register(Product , ProductAdmin)
Das Obige ist der Inhalt von Djangoadminsite (3) InlineModelAdmin. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!