' DownLinkAdmin'对象没有属性请求'

时间:2018-01-11 12:50:04

标签: python django object attributes package

我目前正在为 django软件包进行升级,名为" django-dynamic-link"。

一个非常酷但过时的项目。

我希望这个项目能够运行更新的Django版本(> = 1.11.7)。正如您所看到的on my github fork我已经修复了一些小部分。

允许您进入管理站点并配置动态链接部分。

当我尝试创建动态链接时,收到以下错误消息:

  

文件" /django-dynamic-link/dynamicLink/admin.py",第84行,链接

     

sitelink = siteurl.get_site_url(self.request)AttributeError:

     

' DownLinkAdmin'对象没有属性'请求'

以下是admin.py文件的代码:

from django.contrib import admin
from models import Download
from django.utils.translation import ugettext_lazy as _
import api
import presettings


class DownLinkAdmin(admin.ModelAdmin):
    def queryset(self, request):
    """catch the request object for list pages"""
    self.request = request
    return super(DownLinkAdmin, self).queryset(request)

list_display = ('slug', 'active', 'file', 'valid', 'clicks',
                'timestamp_creation', 'link')
actions = ['make_link']
search_fields = ['slug', 'file_path', 'timestamp_creation', 'link_key']
list_per_page = 50
fieldsets = (
             (_(u'Link'), {
             'fields': ('slug', 'file_path')
             }),
             (_(u'Additional values'), {
             'classes': ('collapse',),
             'fields': ('active', 'current_clicks', 'timeout_hours',
                        'max_clicks')
             }),
             )

def valid(self, obj):
    """Shows time stamp expired or active time"""
    diff = unicode(obj.get_timout_time()).split('.')[0]
    if obj.timeout_time():
        if obj.active:
            # set active to false
            obj.active = False
            obj.save()
        return '<span style="color: #FF7F00; ">%s</span>:<br/> ' \
        % (unicode(_(u'timeout'))) + diff
    else:
        return diff
valid.allow_tags = True
valid.short_description = _(u'valid')

def file(self, obj):
    """Shows truncated filename on platform independent length."""
    return unicode(obj.file_path).split(presettings.DYNAMIC_LINK_MEDIA)[-1]
file.allow_tags = True
file.short_description = _(u'file')

def clicks(self, obj):
    """Shows current and max allowed clicks in the list display"""
    txt = '%s %s %s' % (obj.current_clicks, unicode(_(u'from')),
                        obj.max_clicks)
    if obj.timeout_clicks():
        if obj.active == True:
            # set active to false
            obj.active = False
            obj.save()
        return '<span style="color: #FF7F00; ">%s</span><br/>%s' \
        % (unicode(_('max clicks reached')), txt)
    elif obj.max_clicks == 0:
        return '%s %s <span style="color: #FF7F00; ">%s</span>' \
        % (obj.current_clicks, unicode(_(u'from')),
           unicode(_(u'unlimited')))
    else:
        return txt
clicks.allow_tags = True
clicks.short_description = _(u'clicks')

def link(self, obj):
    """Generate site and download url from link object"""

    # download site with link
    siteurl = api.DownloadSiteUrl([obj.link_key])
    sitelink = siteurl.get_site_url(self.request)
    sitelink = u'<span style="color: #FF7F00; ">%s:</span> \
    <a target="new" href="%s/">%s/</a><br/>' \
    % (unicode(_(u'Site')), sitelink, sitelink)

    # direct accessable link
    filelink = api.file_link_url(self.request, obj)
    filelink = '<span style="color: #FF7F00; ">%s:</span> %s' \
    % (unicode(_(u'File')), filelink)

    return sitelink + filelink
link.allow_tags = True
link.short_description = _(u'link')

def make_link(modeladmin, request, queryset):
    """Action method. Make site url from many singles objects."""
    li = []
    for obj in queryset:
        li.append(obj.link_key)
    siteurl = api.DownloadSiteUrl(li)
    sitelink = siteurl.get_site_url(request)
    # response
    from django.http import HttpResponse
    return HttpResponse('<a target="new" href="%s/">%s/</a><br/>' \
                        % (sitelink, sitelink))
make_link.short_description = _("Make from selected a download site link")

admin.site.register(Download, DownLinkAdmin)

1 个答案:

答案 0 :(得分:0)

更改此行

    def queryset(self, request):
"""catch the request object for list pages"""
self.request = request
return super(DownLinkAdmin, self).queryset(request)

    def get_queryset(self, request):
"""catch the request object for list pages"""
self.request = request
return super(DownLinkAdmin, self).get_queryset(request)

做了伎俩!感谢您的帮助@schwobaseggl