अधिकतर मैं एक साइट (साइट ढांचे से) के लिए फ्लैटपृष्ठ का उपयोग करता हूं। मैं सभी निर्मित फ्लैटपृष्ठों के लिए मौजूदा साइट डिफ़ॉल्ट को कैसे चिह्नित कर सकता हूं? हर बार बनाए गए प्रत्येक पृष्ठ के लिए एक ही साइट चुनने के लिए समय बर्बाद है। क्या मॉडल में इसे ओवरराइड करने या विधि सहेजने का कोई तरीका है?Django flatpages डिफ़ॉल्ट साइट
उत्तर
साइटों क्षेत्र में खाली (models.py -> FlatPage.sites) के लिए अनुमति देने और अपने मॉडल फार्म में रखते (admin.py -> FlatPageForm)
def clean_sites(self):
sites = self.cleaned_data.get('sites')
print sites
return [Site.objects.get(id=settings.SITE_ID)]
संपादित करें: मैं एक बेहतर समाधान के साथ आ गए हैं। यह वर्तमान साइट को पहले से ही कईToMany साइट फ़ील्ड में केंद्रित करता है। Flatpages/admin.py संपादित करें। जोड़ें: from django.contrib.sites.models import Site
फ़ाइल की शुरुआत में और डाल कोड निम्नलिखित class FlatPageAdmin
में:
def formfield_for_manytomany(self, db_field, request=None, **kwargs):
if db_field.name == "sites":
kwargs["initial"] = [Site.objects.get_current()]
return super(FlatPageAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
स्पष्ट होने के लिए, आपको Django कोर के अंदर flatpages/admin.py संपादित नहीं करना चाहिए। आप अपनी खुद की अनुप्रयोग में Flatpages व्यवस्थापक वर्ग उपवर्ग चाहिए और formfield_for_manytomany() विधि ओवरराइड और इन पंक्तियों जोड़ें। –
@JeremyBlanchard, सुनिश्चित करें कि मैं :) – seler
यहाँ कोड का एक पूरी तरह से काम कर रहे टुकड़ा को सुलझाने है FlatPage मॉडल में साइटों क्षेत्र में खाली के लिए अनुमति देने के लिए कोई जरूरत नहीं है
from django.conf import settings
from django.contrib.flatpages.models import FlatPage
from django.contrib.sites.models import Site
class CustomFlatPage(FlatPage):
class Meta:
proxy = True
def save(self):
self.sites = [Site.objects.get(pk=settings.SITE_ID)]
super(CustomFlatPage, self).save()
इसके अलावा इस समाधान:
०१२३५१६४१० मूल समस्या ( सब बनाया flatpages के लिए मौजूदा साइट डिफ़ॉल्ट चिह्नित करने के लिए)- डीबी में केवल एक INSERT या एक अद्यतन चलाता है। पिछला एक डीबी को एक इंसर्ट और एक अपडेट, या दो अपडेट के साथ मार रहा था।
- सिंकबी चलाने के लिए
CustomFlatPage
मॉडल के लिए अतिरिक्त तालिका बनाने के लिए आवश्यक नहीं है।
क्या बयान अपने आप को ठीक है, इस कोड को नहीं काम करता है करते हैं, कारण Django से पहले उदाहरण के एक प्राथमिक कुंजी है कई-से-अनेक रिश्ते बनाने के बारे में शिकायत। तो, यह 'सुपर (CustomFlatPage, आत्म) .save()' 'से पहले self.sites = जोड़ा जाना चाहिए [Site.objects.get (पी = settings.SITE_ID)]' – ygneo
इस अभ्यस्त काम अगर आप अधिक करना चाहते हैं 1 साइटों से अधिक। – seler
क्यों यह 1 से अधिक साइट पर काम नहीं करेगा? 'Site.objects.get (pk = settings.SITE_ID) 'आपको जिस साइट की आवश्यकता है उसे वापस कर देगा, भले ही आपने कितनी साइटें बनाई हों, है ना? – ygneo
मैंने साइट्स के लिए एक कस्टम विजेट का उपयोग करने के लिए FlatpageForm मेटा को पैच करने वाला एक अलग दृष्टिकोण लिया।
from django.forms import SelectMultiple
from django.conf import settings
from django.contrib.flatpages.forms import FlatpageForm
class PreSelectDefaultSiteOnCreateSelectMultiple(SelectMultiple):
def render(self, name, value, attrs=None, choices=()):
if value is None:
# None in the add form, a list, possibly empty, in
# the edit form. So we're adding a new instance here.
value = [settings.SITE_ID]
return super(PreSelectDefaultSiteOnCreateSelectMultiple, self
).render(name, value, attrs, choices)
def flatpages():
"""Hack the sites field widget.
"""
fpafm = FlatpageForm.Meta
if getattr(fpafm, 'widgets', None) is None:
fpafm.widgets = {}
fpafm.widgets['sites'] = PreSelectDefaultSiteOnCreateSelectMultiple
आपको व्यवस्थापक का उपयोग करने से पहले कहीं से फ्लैटपेज() को कॉल करना होगा। मैं कोड के ऊपर एक मॉड्यूल admin.py में एक पैकेज monkey_patches में फिर मेरी जड़ urls.py है, जो पहली बार एक अनुरोध में आता है आयात होता है में डाल दिया,, मैं डाल:
from monkey_patches.admin import flatpages
flatpages()
यह Django 1.4 के अधीन है पायथन 2.7.3 के साथ, लेकिन पुराने संस्करणों के लिए भी काम करना चाहिए।
ओह, और ध्यान दें कि यदि आप वास्तव में एक खाली साइट एसोसिएशन चाहते हैं, तो आप जानबूझकर इसे अचयनित कर सकते हैं, क्योंकि यह केवल विजेट प्रारंभिक है। बाद के संपादन मूल्य के रूप में प्रस्तुत करने के लिए एक खाली सूची पास करेंगे, जो कोई नहीं है।
बिल, केई 1 जी
- 1. Django flatpages बैकअप?
- 2. मेरी Django साइट होस्टिंग
- 3. सार्वजनिक django साइट
- 4. एक Django साइट
- 5. साइट कॉन्फ़िगरेशन django-admin
- 6. 2 भाषाओं के साथ Django साइट
- 7. Django - एकाधिक साइट्स साइट कैशिंग
- 8. उपयोग forms.TextArea Django व्यवस्थापक साइट
- 9. django व्यवस्थापक साइट से लिंक
- 10. Django: साइट-वाइड यूआरएल उपसर्ग
- 11. django दक्षिण माइग्रेशन, डिफ़ॉल्ट
- 12. Django व्यवस्थापक डिफ़ॉल्ट फ़िल्टर
- 13. Django - डिफ़ॉल्ट स्लग
- 14. डिफ़ॉल्ट Django परीक्षण-धावक
- 15. Django डिफ़ॉल्ट रूप मान
- 16. django modeltranslation - डिफ़ॉल्ट फ़ील्ड?
- 17. Django सेटअप डिफ़ॉल्ट लॉगिंग
- 18. django flatpages के साथ wysiwyg संपादक को एकीकृत करने के लिए कैसे?
- 19. Django: कई भाषाओं पर चलने वाली साइट
- 20. Django व्यवस्थापक साइट रिवर्स ForeignKey इनलाइन
- 21. ऑटो रूप से भरें जब Django साइट
- 22. Django व्यवस्थापक डिफ़ॉल्ट मॉडल ऑर्डरिंग
- 23. Django AdminForm फ़ील्ड डिफ़ॉल्ट मान
- 24. मैं django सेटिंग्स में अपनी साइट यूआरएल कहां सेट करूं?
- 25. मॉडल पद्धति से Django मॉडल फ़ील्ड डिफ़ॉल्ट
- 26. अनुकूलन Django व्यवस्थापक TabularInline डिफ़ॉल्ट फ़ील्ड
- 27. Django ओवरराइड डिफ़ॉल्ट रूप त्रुटि संदेश
- 28. Django: ModelChoiceField डिफ़ॉल्ट को हटाएं --------- पसंद
- 29. Django विकल्प। डिफ़ॉल्ट विकल्प कैसे सेट करें?
- 30. Django मॉडल फ़ील्ड डिफ़ॉल्ट के लिए
आपका मतलब Django व्यवस्थापक में है? या सामान्य रूप से मॉडल पर? – Thomas