سؤال

وأستطيع أن أرى مشكلة، أرفقت قانون بلدي والخطأ الصفحة.

في قالب بلدي، وأنا لديك:

{% 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

وحسابي class`

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(). اعتقد ان كنت تستخدم قاعدة البيانات التي لا تفرض المفاتيح الخارجية * السعال * الخلية * * السعال، والبيانات الخاصة بك حصلت عابث.

نصائح أخرى

ويبدو أن قيمة الإرجاع user.get_profile () فارغة، وبالتالي فإنه فشل في الدعوة is_store التالي ():

return not self.account is None

وهذا فشل، لأن النفس فارغ (أي بلا).

[عدل] بعد قراءة هذا (وضمن التشكيلات الجانبية) يبدو أن لمحة عن عدم وجود هذا المستخدم، وبالتالي تحصل على استثناء DoesNotExist.

وانها ليست إعادة توجيه التي لم يتم working- انها بك is_store () إجراء أو غير موجود الشخصي. يجب أن تحقق ما هو بالضبط self.account اشارة.
بقدر ما استطيع ان اقول من النظر في التعليمات البرمجية، لديك جدولين في واحد الخاص بك database- لbaseaccount، الذي يخزن فقط هوية المستخدم، والحساب، والذي يخزن كافة المجالات المرتبطة حساب + معرف baseaccount. يمكنك محاولة استبدال is_store مع شيء من هذا القبيل

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

وأنا بأي حال من الأحوال خبير جانغو، لكن أعتقد أن هذا يمكن أن تفعل خدعة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top