문제

문제를 볼 수 있고 코드와 오류 페이지를 첨부했습니다.

내 템플릿에는 다음과 같습니다.

{% if user.get_profile.is_store %}
    <!--DO SOME LOGIC-->
{%endif%}

내 견해로는 다음과 같습니다.

def downloads(request):
"""
Downloads page, a user facing page for the trade members to downloads POS etc
"""
if not authenticated_user(request):
        return HttpResponseRedirect("/professional/")

if request.user.get_profile().is_store():
        return HttpResponseRedirect("/")

user = request.user
account = user.get_profile()

downloads_list = TradeDownloads.objects.filter(online=1)[:6]
downloads_list[0].get_thumbnail()
data = {}
data['download_list'] = downloads_list

return render_to_response('downloads.html', data, RequestContext(request))

환경:

    Request Method: GET
    Request URL: http://localhost:8000/professional/downloads
    Django Version: 1.1.1
    Python Version: 2.6.2
    Installed Applications:
    ['django.contrib.auth',
     'django.contrib.admin',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.sites',
     'sico.news',
     'sico.store_locator',
     'sico.css_switch',
     'sico.professional',
     'sico.contact',
     'sico.shop',
     'tinymce',
     'captcha']
    Installed Middleware:
    ('django.middleware.common.CommonMiddleware',
     'django.contrib.sessions.middleware.SessionMiddleware',

내 오류 보고서 :

Traceback:
    File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py" in get_response
      92.                 response = callback(request, *callback_args, **callback_kwargs)
    File "/var/www/sico/src/sico/../sico/professional/views.py" in downloads
      78.   if request.user.get_profile().is_store():
    File "/var/www/sico/src/sico/../sico/shop/models.py" in is_store
      988.         return not self.account is None
    File "/usr/local/lib/python2.6/dist-packages/django/db/models/fields/related.py" in __get__
      191.             rel_obj = self.related.model._base_manager.get(**params)
    File "/usr/local/lib/python2.6/dist-packages/django/db/models/manager.py" in get
      120.         return self.get_query_set().get(*args, **kwargs)
    File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py" in get
      305.                     % self.model._meta.object_name)

    Exception Type: DoesNotExist at /professional/downloads
    Exception Value: Account matching query does not exist.

내 BaseAccount 클래스

class BaseAccount(models.Model):
user = models.ForeignKey(User, unique=True)

def __unicode__(self):
    """
    Return the unicode representation of this customer, which is the user's
    full name, if set, otherwise, the user's username
    """
    fn = self.user.get_full_name()
    if fn:
        return fn
    return self.user.username

def user_name(self):
    """
    Returns the full name of the related user object
    """
    return self.user.get_full_name()

def email(self):
    """
    Return the email address of the related user object
    """
    return self.user.email

def is_store(self):
    return not self.account is None

def is_professional(self):
    return not self.professional is None

내 계정 클래스 '

lass Account(BaseAccount):
"""
The account is an extension of the Django user and serves as the profile
object in user.get_profile() for shop purchases and sessions
"""
telephone = models.CharField(max_length=32)
default_address = models.ForeignKey(Address, related_name='billing_account', blank=True, null=True)
security_question = models.ForeignKey(SecurityQuestion)
security_answer = models.CharField(max_length=200)
how_heard = models.CharField("How did you hear about us?", max_length=100)
feedback = models.TextField(blank=True)
opt_in = models.BooleanField("Subscribe to mailing list", help_text="Please tick here if you would like to receive updates from %s" % Site.objects.get_current().name)
temporary = models.BooleanField()

def has_placed_orders(self):
    """
    Returns True if the user has placed at least one order, False otherwise
    """
    return self.order_set.count() > 0

def get_last_order(self):
    """
    Returns the latest order that this customer has placed. If no orders
    have been placed, then None is returned
    """
    try:
        return self.order_set.all().order_by('-date')[0]
    except IndexError:
        return None

def get_currency(self):
    """
    Get the currency for this customer. If global currencies are enabled
    (settings.ENABLE_GLOBAL_CURRENCIES) then this function will return
    the currency related to their default address, otherwise, it returns
    the site default
    """
    if settings.ENABLE_GLOBAL_CURRENCIES:
        return self.default_address.country.currency
    return Currency.get_default_currency()
currency = property(get_currency)

def get_gateway_currency(self):
    """
    Get the currency that an order will be put through protx with. If protx
    currencies are enabled (settings.ENABLE_PROTX_CURRENCIES), then the
    currency will be the same returned by get_currency, otherwise, the
    site default is used
    """
    if settings.ENABLE_PROTX_CURRENCIES and settings.ENABLE_GLOBAL_CURRENCIES:
        return self.currency
    return Currency.get_default_currency()
gateway_currency = property(get_gateway_currency)

`

도움이 되었습니까?

해결책

self.account 존재하지 않는 것을 가리키고 있습니다 Account 처리하려고 할 때 물체 is_store(). 나는 당신이 외래 키*기침*mysql*기침*을 시행하지 않는 데이터베이스를 사용하고 있다고 생각합니다. 그리고 당신의 데이터가 엉망이되었습니다.

다른 팁

user.get_profile () return 값이 비어있는 것처럼 보이므로 다음 is_store () 호출에서 실패합니다.

return not self.account is None

자아가 비어 있기 때문에 실패합니다 (예 : 없음).

편집] 읽기 후 이것 (프로파일 아래) 해당 사용자의 프로필이 존재하지 않으므로 DoSNOTEXIST 예외를 얻습니다.

작동하지 않는 리디렉션이 아닙니다. IS_STORE () 프로 시저 또는 존재하지 않는 프로필입니다. 당신은 정확히 self.account를 참조하는 것이 무엇인지 확인해야합니다.
코드를보고 알 수있는 한, 데이터베이스에 두 개의 테이블이 있습니다. BaseAccount의 경우 사용자 ID와 계정을 저장하는 계정 + BaseAccount ID와 관련된 모든 필드를 저장합니다. is_store를 이와 같은 것으로 바꿀 수 있습니다.

def is_store(self):
try: 
    return self.account is None 
except Account.DoesNotExist: 
    return False

나는 결코 Django 전문가가 아니지만 이것이 트릭을 수행 할 수 있다고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top