2 tablo Kullanıcılar arasında bir çok ilişki var bir Etki Alanları. Bu ilişkiyi Domains sınıfında tanımladım. Yani yönetici arayüzünde, Etki Alanları'nı görüntülerken Kullanıcıları görüyorum. Ancak, Kullanıcıları görüntülerken Alanlar'ı görmüyorum. Bunu nasıl başarabilirim.Django Yönetici Formu Birçok farklı ilişki için
cevap
Aradığınız şeyin InlineModelAdmin olduğunu düşünüyorum.
Yalnızca yerleşik bir yol, bir InlineModelAdmin yoluyla yapılır, ancak bu amaçla alan oluşturmak için User ModelAdmin'inizle özel bir ModelForm kullanabilirsiniz. Basitleştirilmiş kurulum için aşağıdaki kodlara bakın (users = ManyToManyField(related_name='domains')
varsayar).
### yourapp/admin.py ###
from django import forms
from django.contrib import admin
from django.contrib.auth.models import User
from django.utils.translation import ugettext_lazy as _
from django.contrib.admin.widgets import FilteredSelectMultiple
from .models import Domain
class DomainAdmin(admin.ModelAdmin):
filter_horizonal = ('users',)
class UserAdminForm(forms.ModelForm):
domains = forms.ModelMultipleChoiceField(
queryset=Domain.objects.all(),
required=False,
widget=FilteredSelectMultiple(
verbose_name=_('Domains'),
is_stacked=False
)
)
class Meta:
model = User
def __init__(self, *args, **kwargs):
super(UserAdminForm, self).__init__(*args, **kwargs)
if self.instance:
self.fields['domains'].initial = self.instance.domains.all()
def save(self, commit=True):
user = super(UserAdminForm, self).save(commit=False)
user.domains = self.cleaned_data['domains']
if commit:
user.save()
user.save_m2m()
return user
class UserAdmin(admin.ModelAdmin):
form = UserAdminForm
admin.site.register(Domain, DomainAdmin)
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
için InlineModelAdmin'i nasıl kullanırım? Bu, 'kullanıcı' eklerken benim için işe yaramadı (benim durumumda 'Kullanıcı' değil). '__init__' yönteminde self.instance.id' i kontrol etmem gerekiyordu ve yeni nesneyi etki alanına atamadan önce kaydetmem gerekiyordu. – alalonde
Bu eski bir iplik olduğunu biliyorum, ama bu google gelen ilk sonucuydu ve daha iyi bir cevap gerekli olduğunu düşündüm.
class Test1(models.Model):
tests2 = models.ManyToManyField('Test2', blank=True)
class Test2(models.Model):
tests1 = models.ManyToManyField(Test1, through=Test1.tests2.through, blank=True)
kendim test edilmiş ve sonuçları ile çok memnun oldu:
this django bug report Via senin ManyToManyField her iki modelde de gösterilmesi için en iyi yol buldu. Hala bu karşılaşırız insanlar için
"Test2" hata tanımlı değil, mantık gibi görünüyor, çünkü Test2, çağrıldığında tanımlanmadı. Yine de çözümünüz işe yarayacaktır. – Timo
, bu Zaten diğer uygulamalar tarafından tanımlanmış ModelAdmins içinde çift yönlü çok-çok alanı enjekte edilmesi için bir mekanizma sağlar https://github.com/kux/django-admin-extend
incelemeye değer olabilir.
- 1. Django Yönetici: Birçok-çok listbox
- 2. Django Yönetici
- 3. Tastypie, birçok ilişki
- 4. Birçok katılan 3 sınıfla birçok ilişki -
- 5. django bir çok ilişki için
- 6. Django Yönetici + Filtre Yatay?
- 7. Django alan için varsayılan formu değiştir
- 8. Django yönetici -
- 9. SQLALchemy Birçok Polimorfik modelle birçok model ilişki yapılandırması
- 10. Django formu
- 11. Django formu ve i18n
- 12. Django: Birçok dilde site çalıştırma
- 13. Django Yönetici: Listedeki veriler
- 14. bir Django yönetici şablonuna
- 15. Extjs 5 veri modeli - birçok ilişki var
- 16. Django yönetici MySQL
- 17. Django 1.2.1 Birçok Alana Çok Sayıda Inline Admin
- 18. Django koşullu yönetici listesi_editable
- 19. nsfetchedresultcontroller ile birçok ilişki nasıl görüntülenir?
- 20. İki sınıf olan birçok ilişki Android
- 21. Django yönetici QuerySet filtreleme
- 22. Django yönetici listesi filtresi
- 23. Django yönetici modeli
- 24. Django - Yönetici: list_display TextField
- 25. k-ortalamaları birçok farklı nokta için R
- 26. Bir model için iki yönetici sınıfı django
- 27. anasayfa giriş formu Django
- 28. Django formu açılır liste
- 29. Farklı düzen formu hataları
- 30. Farklı uygulamalar için farklı veritabanlarını django
Muhtemelen OP'nin ne beklediğini (normal ManyToMany filtre seçicisini ilişkinin her iki tarafından kullanmanın bir yolu) değil, ama bu benim de kullanacağım çözüm. –
İlişki tablosuna nasıl başvurabilirim (durumumdaki Domains_User) Açık ara tablo yok. Bu durumda, ManyToManyRelationship –