Daha İyi Bir Django Yöneticisi ManyToMany Alan Widget'ı


102

Django Admin'in varsayılan models.ManyToManyFieldwidget'ını kullanmak için kullanışsız buluyorum . Bu HTML seçme öğesidir ve "diğer" modelin çok sayıda Nesnesine sahipseniz, "bu" Nesne ile ilişkilendirmek istediğiniz "diğer" Nesneleri bulmak oldukça pratik değildir. Ve "diğer" modelin çok sayıda nesnesine sahipseniz, bu, Yönetici sayfasının oluşturulmasını yavaşlatıyor gibi görünüyor.

Kendi özel yönetici widget'ımı oluşturabileceğimi ve ManyToManyFieldsuygun gördüğüm şekilde uygulayabileceğimi biliyorum , ancak bunun yerine kullanabileceğim önceden oluşturulmuş olanlar var mı? Rüyalarımda, otomatik tamamlanan bir metin girişi HTML widget'ı hayal ediyorum. Bu, Django yönetici çerçevesinde yapmak pratik / mümkün mü?

Teşekkürler.

Yanıtlar:


161

filter_horizontalYönetici sınıfınızdaki özelliği kullanmayı deneyin , örneğin:

class SomeModelAdmin(admin.ModelAdmin):
    filter_horizontal = ('users',)

Belgelerde belirtildiği gibi , "bu listeye bir ManyToManyField eklemek, bunun yerine seçenekler içinde aramaya izin veren şık ve göze batmayan bir JavaScript" filtre "arayüzü kullanacaktır". filter_verticalaynı şeyi biraz farklı bir düzende yapar.


Harika! Bu tam olarak aradığım gibi geliyor, bir deneyeceğim.
Chris W.

Çalışıyor Ama bu dosyalanmış sadece nasıl okunur. Read only_fields = ('users',) deniyorum. Ancak virgülle ayrılmış tek satırda gösterilir. Satır sonu olarak göstermek istiyorum ...
Varnan K

Kendi widget'ımı yazmak zorunda kalacağımdan endişeliydim, ama bu mükemmel! Bunun için teşekkürler! ; P
umat

7

yöneticide ham bir kimlik kullanmayı deneyebilirsiniz. ve django dokümanları: http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.raw_id_fields

otomatik tamamlamalı bir şey arıyorsanız, buna bir başlangıç ​​noktası olarak bakmak isteyebilirsiniz http://code.djangoproject.com/wiki/AutoCompleteSolutions

ve son olarak çok basit bir satır içi Örnek:

models.py

class SomeModel(models.Model):
    users = models.ManyToMany(User)

admin.py:

class SomeModelAdmin(admin.ModelAdmin):
    raw_id_fields = ("users",)

3

Aslında onunla oynamadım ama bu umut verici görünümlü kütüphaneyi başka yerlerde referans olarak buldum .

Tam olarak istediğimi yapıyor gibi görünüyor. İlgili nesnelerin tüm listesini (kaç tane olduğuna bakılmaksızın!) Yüklemek ve bunlardan birkaçını seçmeniz için size bir seçici sunmak filter_horizontalyerine, bir arama / filtre kutusu sunar ve sonuçları almak için önden / otomatik tamamlama çağrılarını kullanır. dinamik olarak. Bu, 5000 kullanıcınız olduğu ve 5k <option>öğenin indirilmesini ve oluşturulmasını beklemeden 3 veya 4 tanesini seçmek istediğiniz durumlarda harika .


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.