Frage

Sagen, dass ich eine Blogging-app in Django haben. Wie kann ich wieder um eine ziehbar Tabelle in der Standard-Admin die Beiträge mit?

Am besten wäre es, wenn ich keine zusätzlichen Felder zum Modell hinzugefügt habe, aber wenn ich wirklich haben, ich kann.

War es hilfreich?

Lösung

Code arbeiten, dies zu tun Besuche Snippet 1053 unter djangosnippets.org .

Andere Tipps

Hinweis auf die „Am besten wäre es, wenn ich keine zusätzliche Felder zum Modell hinzugefügt haben, aber wenn ich muss, ich kann wirklich.“

Es tut uns Leid, aber Reihenfolge der Informationen in einer Datenbank wird durch die Informationen selbst bestimmt: Sie müssen immer eine Spalte für die Bestellung hinzufügen. Es gibt wirklich keine Wahl darüber.

Ferner abzurufen Dinge in dieser Reihenfolge, müssen Sie speziell .order_by(x) auf Ihre Fragen hinzufügen oder ordering zu Ihrem Modell hinzufügen.

class InOrder( models.Model ):
    position = models.IntegerField()
    data = models.TextField()
    class Meta:
        ordering = [ 'position' ]

Ohne die zusätzliche Feld Bestellung kann nicht passieren. Es ist eine der Regeln von relationalen Datenbanken.

Es gibt ein schönes Paket Admin für die Bestellung in diesen Tagen Objekte

https://github.com/iambrandontaylor/django-admin-sortable

Auch django-Anzug hat eingebaute Unterstützung für diese

In Modellklasse würden Sie wahrscheinlich „Ordnung“ Feld muss hinzufügen, bestimmten Reihenfolge zu halten (z. B. Artikel mit order = 10 ist die letzte und Ordnung = 1 ist die erste). Dann können Sie einen JS-Code in Admin change_list Vorlage (siehe

Sie können versuchen, diese Schnipsel https://gist.github.com/barseghyanartur/1ebf927512b18dc2e5be (ursprünglich auf der Grundlage dieser Schnipsel http://djangosnippets.org/snippets/2160/ ).

Die Integration ist sehr einfach.

Ihr Modell (in models.py):

class MyModel(models.Model):
    name = models.CharField(max_length=255)
    order = models.IntegerField()
    # Other fields...

    class Meta:
        ordering = ('order',)

Sie admin (admin.py):

class MyModelAdmin(admin.ModelAdmin):
    fields = ('name', 'order',) # Add other fields here
    list_display = ('name', 'order',)
    list_editable = ('order',)

    class Media:
        js = (
            '//code.jquery.com/jquery-1.4.2.js',
            '//code.jquery.com/ui/1.8.6/jquery-ui.js',
            'path/to/sortable_list.js',
        )

Sie die JS ändern (des Snippets) entsprechend, wenn Ihre Attribute für den Namen und die Reihenfolge hält anders in Ihrem Modell genannt werden.

Die Bestellung kann nur bestimmt werden, wenn Sie ein Feld in Ihrer model.Let der fügen Sie ein Positionsfeld in Ihrem Modell hinzufügen.

In your models.py 

class MainModel(models.Model):

    name = models.CharField(max_length=255)
    position = models.PositiveSmallIntegerField(null=True)

    class Meta:
        ordering = ('position',)

In your apps admin.py

class IdeaCardTagInline(nested_admin.NestedStackedInline):
    model = MainModel
    extra = 0
    min_num = 1
    sortable_field_name = "position"

ordering = ('position',) in Meta die MainModel bestellen entsprechend den Wert im Positionsfeld. sortable_field_name = "position" wird in autofill des Wertes in Position helfen, wenn ein Benutzer per Drag & Drop die mehrere Modelle.

Um die gleiche Reihenfolge in Ihrem api zu sehen, verwenden order_by (x) in views_model.py. Nur ein Modellbeispiel:

Model.objects.filter().order_by('position').
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top