두 개의 테이블 사용자 간의 많은 관계가 있습니다. Domains 클래스에서이 관계를 정의했습니다. 그래서 도메인을 볼 때 관리 인터페이스에서 사용자를 봅니다. 그러나 사용자를 볼 때 도메인이 표시되지 않습니다. 어떻게해야합니까?Django 관리자 양식 (many to many relationship)
답변
당신이 찾고있는 것이 InlineModelAdmin이라고 생각합니다.
유일한 기본 제공 방법은 InlineModelAdmin이지만, 사용자 ModelAdmin을 사용하여 사용자 정의 ModelForm을 사용하여이 용도로 필드를 만들 수 있습니다. 간단한 설정은 아래 코드를 참조하십시오 (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)
'사용자'(제 경우에는 '사용자'가 아닌)를 추가 할 때 이것은 저에게 맞지 않습니다. '__init__' 메쏘드에서'self.instance.id'를 검사 할 필요가있었습니다. 새로운 객체를 도메인에 할당하기 전에 save()를해야했습니다. – alalonde
나는 이것이 오래된 스레드라는 것을 알고 있지만 이것은 Google에서 처음 나온 결과이며 더 나은 대답이 필요하다고 생각했습니다.
class Test1(models.Model):
tests2 = models.ManyToManyField('Test2', blank=True)
class Test2(models.Model):
tests1 = models.ManyToManyField(Test1, through=Test1.tests2.through, blank=True)
나는 그것을 나 자신을 시험하고 결과에 매우 만족했다있다 :
는 this django bug report를 통해 나는 당신의 ManyToManyField이 두 모델에 표시해야하는 가장 좋은 방법을 발견했다. 아직이 우연히 사람들을 위해
Test2가 호출 될 때 정의되지 않았기 때문에 논리로 보이는 "Test2"오류 메시지가 표시됩니다. 귀하의 솔루션은 비록 일하고 있다면 빛나는 것입니다 – Timo
, 그것은 그것은 이미 다른 응용 프로그램에 의해 정의 된 ModelAdmins 양방향 다 대다 필드를 주입하기위한 메커니즘을 제공 https://github.com/kux/django-admin-extend
을 확인하는 가치가있을 수도 있습니다.
- 1. ddd의 many to many relationship
- 2. many to many relationship mysql select
- 3. many many relationship with insert
- 4. Django Many To Many Many Order 주문
- 5. Django 모델 : many-to-many 또는 many-to-one?
- 6. Django HardCoding 폼의 Many to Many 필드
- 7. Django admin many to many 테이블 이름
- 8. 스키마 디자인 : many to many many to many many one to many
- 9. Nosql many-to-many
- 10. many to many relationships
- 11. many to many relationships
- 12. many to many crud
- 13. NHibernate와 many to many 매핑
- 14. many-to-many 같은 PK
- 15. Mysql many to many queries
- 16. CodeIgniter many to many relationships
- 17. many-to-many 임베디드 폼
- 18. NHibernate many-to-many criteria
- 19. many-to-many 테이블을 인덱싱해야합니까?
- 20. SQL 문 many-to-many
- 21. NHibernate many to many mapping
- 22. Many to Many, 다른 열이
- 23. asp.net mvc many-to-many one-to-many
- 24. 개체/개체 : Many to Many 및 Many to One
- 25. 1 many-to-many 대신에 one-to-many
- 26. Linq to SQL - many to many mapping
- 27. Linq to SQL, many to many designs
- 28. many to many to one (mysql)
- 29. Django : ModelForm의 save() 메소드에서 many-to-many 필드로 저장 하시겠습니까?
- 30. Django QuerySet에서 관련된 모든 many-to-many 객체 얻기
아마 OP가 기대했던 것 (관계의 양쪽에서 일반적인 ManyToMany 필터 선택기를 사용하는 방법)이 아니 겠지만, 이것도 제가 사용할 해결책입니다. –
관계 테이블 (내 케이스에서는 Domains_User)을 참조하는 방법 명시 적 중개 테이블이 없습니다. 이 경우 어떻게 ManyToManyRelationship에 대한 InlineModelAdmin을 사용합니까 –