Tôi có mối quan hệ nhiều đến nhiều giữa 2 bảng Người dùng miền. Tôi đã xác định mối quan hệ này trong lớp Miền. Vì vậy, trong giao diện quản trị, tôi thấy Người dùng khi tôi đang xem Miền. Nhưng tôi không thấy Tên miền khi tôi xem Người dùng. Làm cách nào để đạt được điều này.Mẫu quản trị Django cho nhiều mối quan hệ
Trả lời
Tôi nghĩ rằng những gì bạn đang tìm kiếm là InlineModelAdmin.
Cách tích hợp duy nhất là thông qua InlineModelAdmin, nhưng bạn có thể sử dụng ModelForm tùy chỉnh với Mô hình người dùngAdmin để tạo trường cho mục đích này. Xem mã bên dưới để thiết lập đơn giản (giả sử users = ManyToManyField(related_name='domains')
).
### 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ều này không hoàn toàn phù hợp với tôi khi thêm 'user' (không phải là 'User' trong trường hợp của tôi). Tôi cần kiểm tra 'self.instance.id' trong phương thức' __init__', và tôi cần 'save()' đối tượng mới trước khi gán tên miền cho nó. – alalonde
Tôi biết rằng đây là một chuỗi cũ hơn, nhưng đây là kết quả đầu tiên xuất hiện trên google và tôi nghĩ câu trả lời tốt hơn là cần thiết.
Via this django bug report tôi thấy cách tốt nhất để có ManyToManyField của bạn hiển thị trên cả hai mô hình:
class Test1(models.Model):
tests2 = models.ManyToManyField('Test2', blank=True)
class Test2(models.Model):
tests1 = models.ManyToManyField(Test1, through=Test1.tests2.through, blank=True)
Tôi đã thử nghiệm nó bản thân mình và rất hài lòng với kết quả.
Tôi nhận được thông báo lỗi "Test2" không được xác định có vẻ logic vì Test2 không được xác định khi được gọi. Giải pháp của bạn sẽ rực rỡ nếu làm việc – Timo
Đối với những người vẫn còn đụng vào này, nó có thể là giá trị kiểm tra https://github.com/kux/django-admin-extend
Nó cung cấp một cơ chế để tiêm hai chiều nhiều-nhiều lĩnh vực trong ModelAdmins đã được xác định bởi các ứng dụng khác.
- 1. Lọc mối quan hệ Nhiều-Nhiều từ trường Mối quan hệ ở Django
- 2. Mối quan hệ giữa nhiều mối quan hệ giữa nhiều mô hình
- 3. Lọc Nhiều người đến Nhiều mối quan hệ trong Django
- 4. Giá trị tối đa trong mối quan hệ nhiều-nhiều
- 5. Nhiều mối quan hệ với nhiều người
- 6. Django admin nội tuyến cho mối quan hệ sâu sắc
- 7. Tham chiếu tuần hoàn trong mối quan hệ nhiều chiều đến nhiều mối quan hệ
- 8. Đăng một mối quan hệ một-nhiều
- 9. séc JPQL nhiều-nhiều mối quan hệ
- 10. Yii nhiều mối quan hệ
- 11. Nhiều mối quan hệ với dữ liệu bổ sung về mối quan hệ
- 12. setPrimitiveValue: forKey: và nhiều mối quan hệ
- 13. Mối quan hệ nhiều-nhiều chung chung
- 14. Cập nhật mối quan hệ nhiều-nhiều
- 15. Nhận ID ContentType ở Django cho mối quan hệ chung
- 16. Django DatabaseError: mối quan hệ "django_site"
- 17. Lỗi Django: cần có giá trị cho trường "..." trước mối quan hệ nhiều-nhiều này có thể được sử dụng
- 18. Django Aggregation Across Xếp Mối quan hệ
- 19. Mối quan hệ tự giới thiệu Django?
- 20. Tiện ích biểu mẫu Symfony2 cho các mối quan hệ nhiều-nhiều-
- 21. Django: Truy cập nhiều đối tượng Nhiều thông qua mối quan hệ Nhiều đến Nhiều
- 22. Cách Django ORM trải qua nhiều mối quan hệ Nhiều-Nhiều-Nhiều
- 23. django-tastypie và nhiều nhiều "thông qua" các mối quan hệ
- 24. Nhiều mối quan hệ trong JSON
- 25. Thực thi ít nhất một giá trị trong quan hệ nhiều-nhiều, trong Django?
- 26. Làm thế nào để hiển thị giá trị raw_id của một mối quan hệ ManyToMany trong quản trị Django?
- 27. Tastypie, lọc nhiều mối quan hệ
- 28. Xóa quy tắc cho mối quan hệ nhiều-một-một
- 29. tiêu chí jpa cho nhiều mối quan hệ
- 30. Truy vấn máy chủ SQL cho nhiều mối quan hệ
Có lẽ không phải điều mà OP mong đợi (một cách để sử dụng bộ chọn lọc ManyToMany thông thường từ hai bên của quan hệ), nhưng đây là giải pháp tôi cũng sẽ sử dụng. –
Làm thế nào để tôi tham khảo bảng quan hệ (Domains_User trong trường hợp của tôi) Tôi không có bảng trung gian rõ ràng. Trong trường hợp này làm thế nào để tôi sử dụng InlineModelAdmin cho ManyToManyRelationship –