को Django व्यवस्थापक पर्चा मैं 2 टेबल उपयोगकर्ता एक डोमेन के बीच कई रिश्ते के लिए कई की है। मैंने डोमेन संबंध में इस संबंध को परिभाषित किया है। तो व्यवस्थापक इंटरफ़ेस में जब मैं डोमेन देख रहा हूं तो मैं उपयोगकर्ताओं को देखता हूं। लेकिन जब मैं उपयोगकर्ताओं को देख रहा हूं तो मुझे डोमेन दिखाई नहीं देता है। मैं इसे कैसे प्राप्त कर सकता हूं।कई के लिए कई रिश्ते
उत्तर
मुझे लगता है कि आप जो खोज रहे हैं वह 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)
के लिए InlineModelAdmin का उपयोग कैसे करूं, यह 'उपयोगकर्ता' जोड़ते समय मेरे लिए काफी काम नहीं करता (मेरे मामले में 'उपयोगकर्ता' नहीं)। मुझे '__init__' विधि में 'self.instance.id' की जांच करने की आवश्यकता थी, और मुझे डोमेन को निर्दिष्ट करने से पहले' नई वस्तु 'को सहेजने की आवश्यकता थी। – alalonde
मुझे पता है कि यह एक पुराने धागा है, लेकिन यह पहली नतीजा यह है कि गूगल पर आया था और मैंने सोचा कि एक बेहतर जवाब जरूरी हो गया था।
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" परिभाषित नहीं किया गया है जो तर्क लगता है क्योंकि टेस्ट 2 को परिभाषित नहीं किया जाता है। यद्यपि काम करते हुए आपका समाधान शानदार होगा – Timo
लोग हैं, जो अभी भी इस टक्कर के लिए, यह जाँच https://github.com/kux/django-admin-extend
यह ModelAdmins कि पहले से ही अन्य एप्लिकेशन द्वारा परिभाषित किया गया है में द्विदिश कई करने वाली कई क्षेत्रों इंजेक्शन लगाने के लिए एक तंत्र प्रदान लायक हो सकता है।
शायद नहीं क्या ओ पी (संबंध के दोनों ओर से नियमित रूप से ManyToMany फिल्टर का भी उपयोग कर के लिए एक रास्ता) के लिए उम्मीद की थी, लेकिन इस समाधान मैं भी प्रयोग करेंगे है। –
मैं रिलेशनशिप तालिका (मेरे मामले में डोमेन_यूसर) का संदर्भ कैसे लगा सकता हूं मेरे पास स्पष्ट मध्यस्थ तालिका नहीं है। इस मामले में मैं कईToManyRelationship –