मॉडलों के साथ अजगर 3.4.1 पर Django 1.8 का उपयोग करना:Django व्यवस्थापक इनलाइन: select_related
class Product(models.Model):
name = models.CharField(max_length=255)
# some more fields here
def __str__(self):
return self.name
class PricedProduct(models.Model):
product = models.ForeignKey(Product, related_name='prices')
# some more fields here
def __str__(self):
return str(self.product)
class Coming(models.Model):
# some unimportant fields here
class ComingProducts(models.Model):
coming = models.ForeignKey(Coming)
priced_product = models.ForeignKey(PricedProduct)
# more unimportant fields
और निम्नलिखित admin.py:
class ComingProductsInline(ForeignKeyCacheMixin, admin.TabularInline):
model = ComingProducts
class ComingAdmin(admin.ModelAdmin):
inlines = [ComingProductsInline]
बेशक
, मैं गुणा प्रश्नों के साथ एक समस्या है डेटाबेस में: मेरे पास सूची में प्रत्येक आइटम और प्रत्येक पंक्ति के लिए एक क्वेरी के लिए एक क्वेरी है। इसलिए, 100 आइटम होने पर मुझे 100^2 प्रश्न मिलते हैं। मैंने Caching queryset choices for ModelChoiceField or ModelMultipleChoiceField in a Django form के साथ प्रत्येक पंक्ति के लिए प्रश्नों के साथ समस्या हल की है लेकिन मुझे अभी भी str विधि के साथ समस्या है। मैं कोशिश की है निम्नलिखित:
1) ComingAdmin को prefetch_related जोड़ना:
def get_queryset(self, request):
return super(ComingAdmin, self).get_queryset(request). \
prefetch_related('products__product')
2) ComingProductInline को select_related जोड़ना:
def get_queryset(self, request):
return super(ComingProductsInline, self).get_queryset(request). \
select_related('priced_product__product')
3) इनलाइन के लिए कस्टम प्रपत्र को परिभाषित करने के लिए और select_related जोड़ने फ़ील्ड क्वेरीसेट:
class ComingProductsInline(ForeignKeyCacheMixin, admin.TabularInline):
model = ComingProducts
form = ComingProductsAdminForm
class ComingProductsAdminForm(ModelForm):
def __init__(self, *args, **kwargs):
super(ComingProductsAdminForm, self).__init__(args, kwargs)
self.fields['priced_product'].queryset = PricedProduct.objects.all(). \
select_related('product')
class Meta:
model = ComingProducts
fields = '__all__'
4) एक कस्टम फॉर्मेट परिभाषित करना:
class ComingProductsInline(ForeignKeyCacheMixin, admin.TabularInline):
model = ComingProducts
formset = MyInlineFormset
class MyInlineFormset(BaseInlineFormSet):
def __init__(self, data=None, files=None, instance=None,
save_as_new=False, prefix=None, queryset=None, **kwargs):
super(MyInlineFormset, self).__init__(data, files, instance,
save_as_new, prefix, queryset, **kwargs)
self.queryset = ComingProducts.objects.all(). \
prefetch_related('priced_product__product')
5) पिछले 4 तरीकों
और कुछ नहीं के लिए विभिन्न संयोजनों में मदद करता है: PricedProduct के लिए str के प्रत्येक कॉल उत्पाद तालिका के लिए एक प्रश्न प्रदर्शन करने के लिए Django बनाता है। इन सभी विधियों का उल्लेख स्टैक ओवरफ्लो पर किया गया था, लेकिन उन्होंने मॉडलएडमिन का इलाज किया, और इनलाइन के साथ मदद नहीं करते हैं। मुझे क्या याद आती है?
ओह। यह एक जीवन बचतकर्ता है। मेरे पास मॉडल ए था, जिसमें मॉडल बी बी के कई इनलाइन थे, जिनमें तीन एम 2 एम और दो एफके रिश्ते थे। इसके अलावा। मॉडल अनुवाद का इस्तेमाल किया गया था। इसके अलावा, ग्रैपपेली ने अपनी स्वतः पूर्ण मदद की। दुर्भाग्यवश – Aitvaras
, यह Django 2.0 – ramusus
में कैसे काम नहीं करता है? ऐसा लगता है कि Django का प्रासंगिक कोड बदल गया है – noamk