2010-04-12 30 views
6

यहां एक अजीब त्रुटि है, शायद कोई भी स्रोत को ट्रैक करने में मदद कर सकता है क्योंकि यह Django CMS प्रोजेक्ट & का उपयोग करने का प्रयास करने के प्रयासों को उपयोग करने का प्रयास करता है कि इस परियोजना जो मैं पर पूरी तरह से स्पष्ट नहीं कर रहा हूँ के हिस्से के रूप संक्षेप में, का उपयोग करते हुए:। टिप्पणी मेंजेनेरिक लिस्ट व्यू विशेषता त्रुटि बढ़ाता है: "फ़ंक्शन 'ऑब्जेक्ट में कोई विशेषता नहीं है' _clone '

urls.py 
====================== 
from django.conf.urls.defaults import * 
from cmsplugin_flat_news.models import News 

'''RETURNING _CLONE ERROR WHEN IMPLEMENTED 
def get_news(): 
    return News.published.all() 

news_dict = { 
    'queryset': get_news, 
} 

news_list_dic = { 
    'queryset': get_news, 
    'paginate_by': 50, 
} 
''' 
# NEXT SECTION FUNCTIONS BUT NEEDS SERVER RESTART TO SEE NEW POSTS. 
#CHANGING TO JUST News.published.all RAISES SAME ISSUE AS USING WRAPPER 
#SOLUTION ABOVE. SEE: http://docs.djangoproject.com/en/dev/topics/db/queries/#caching-and-querysets 
#& EXAMPLE HERE: http://docs.djangoproject.com/en/dev/topics/generic-views/#adding-extra-context 

news_dict = { 
    'queryset': News.published.all(), 
} 

news_list_dic = { 
    'queryset': News.published.all(),#SAME ISSUE 
    'paginate_by': 50, 
} 

urlpatterns = patterns('django.views.generic.list_detail', 
    (r'^$', 'object_list', news_list_dic), 
    (r'^(?P<page>[0-9]+)/$', 'object_list', dict(news_list_dic)), 
    url(r'^(?P<slug>[-\w]+)/$', 'object_detail', news_dict, name='news_view'), 
) 

models.py 
====================== 
class PublishedNewsManager(models.Manager): 
    #Filters out all unpublished news and news with a publication date in the future 
    def get_query_set(self): 
     return super(PublishedNewsManager, self).get_query_set() \ 
        .filter(is_published=True) \ 
        .filter(pub_date__lte=datetime.datetime.now()) 

class News(models.Model): 
    title   = models.CharField(_('Title'), max_length=255) 
    slug   = models.SlugField(_('Slug'), unique_for_date='pub_date') 
    author   = models.ForeignKey(User) 
    description  = models.TextField(_('Description'), blank=True) 
    image   = generic.GenericRelation('NewsImage', blank=True, null=True) 
    content   = models.TextField(_('Content'), blank=True) 
    tags   = TagField() 
    is_published = models.BooleanField(_('Published'), default=False) 
    pub_date  = models.DateTimeField(_('Publication date'), default=datetime.datetime.now()) 
    created   = models.DateTimeField(auto_now_add=True, editable=False) 
    updated   = models.DateTimeField(auto_now=True, editable=False) 
    published  = PublishedNewsManager() 
    objects   = models.Manager() 

मुद्दा देखें: मूल रूप से, त्रुटि विचारों को अतिरिक्त प्रसंग जोड़ने के लिए 'सही' समाधान को लागू करने से उठाया। त्रुटि Attribute Error: "'function' object has no attribute '_clone'"

कोशिश कर रहा है: News.published.all() के बजाय News.published.all त्रुटि w हेपर एक रैपर फ़ंक्शन के हिस्से के रूप में या सीधे urlpattern के क्वेरीसेट भाग में उपयोग किया जाता है।

कुछ स्पष्ट याद आना चाहिए? सोचें कि प्रकाशित न्यूज़ मैनेजर के साथ ऑब्जेक्ट्स को एक शब्दकोश के रूप में वापस नहीं करना है, या ऑब्जेक्ट को सही तरीके से देखने के लिए कोड को ट्वीव करना है।

उत्तर

9

_clone त्रुटियां एक सामान्य हेरिंग के तर्क के रूप में एक कार्य को पारित करने के कारण एक लाल हेरिंग होती हैं जहां QuerySet अपेक्षित है। जेनेरिक विचारों के लिए News.published.all() पास करने वाले आपके कोड का संस्करण सही है, क्योंकि जेनेरिक व्यू उन्हें दिए गए क्वेरीसेट को क्लोन करने का प्रयास करेंगे, ताकि वे पहले से पूछे गए डेटा को कैश करने से बच सकें (इसलिए जब आप फ़ंक्शन में पास करते हैं तो त्रुटि) ।

आपकी समस्या यह प्रतीत होती है कि आपकी कस्टम get_query_set विधि QuerySet को वर्तमान दिनांक और समय के आधार पर फ़िल्टर किया गया था जब विधि कहा जाता था।

मैं प्रलेखन filter के बारे में तर्क प्रतिदेय होने में कुछ भी नहीं देख सकते हैं, लेकिन मैं this ticket which suggests that filter can take callable arguments पाते हैं, तो यह बुला की तुलना में अपने प्रबंधक को बदलने के समारोह में पारित करने के लिए वर्तमान दिनांक/समय प्राप्त करने के लिए कहा जाता था, बल्कि का प्रयास किया तुरंत:

class PublishedNewsManager(models.Manager): 
    def get_query_set(self): 
     return super(PublishedNewsManager, self).get_query_set() \ 
        .filter(is_published=True) \ 
        .filter(pub_date__lte=datetime.datetime.now) 
+0

insin धन्यवाद, कि बस टिकट दिया गया है:

'RawQuerySet' ऑब्जेक्ट कोई विशेषता '_clone'

कोड है! – Chris

0

ठीक है, मैं नहीं बिल्कुल ओ पी के रूप में ही उपयोग के मामले में है, लेकिन मैं सामान्य दृश्यों पर एक RawQuerySet पारित करने के लिए कोशिश कर रहा था और _clone त्रुटि है, जो मैं एक बदसूरत हैक साथ तय हो रही है RawQuerySet उदाहरण के लिए।

ऐसा लगता है कि जेनेरिक व्यू करना चाहते हैं कि क्वेरीसेट क्लोन करना है (कैशिंग उद्देश्यों के लिए?), इसलिए मैंने ऑब्जेक्ट को अपनी प्रतिलिपि वापस कर दी जो कॉल को _clone से संतुष्ट करता था।

त्रुटि:

from django.views.generic.list_detail import object_list 

.... 

li_file = File.objects.raw("SELECT * FROM file_file WHERE fn like %s", [search]) 

#adding this fixed the _clone missing error 
def clone(self): 
    #return self - this works as well. 
    return copy.copy(self) 

li_file.__class__._clone = clone 
#end of addition 

return object_list(request, 
       queryset = li_file, 
       template_name = "file/found.html", 
       )   
संबंधित मुद्दे

 संबंधित मुद्दे