Pergunta

Eu posso ver o problema, eu anexo o meu página de código e erro.

No meu modelo, eu tenho:

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

Em minha opinião, eu tenho:

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))

Ambiente:

    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',

O meu relatório de erro:

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.

Meu BaseAccount Class

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

A Minha Conta 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)

`

Foi útil?

Solução

self.account está apontando para um objeto Account inexistente quando se está tentando is_store() processo. Eu acho que você está usando um banco de dados que não impõe chaves estrangeiras * tosse * MySQL * tosse *, e seus dados ficou confuso.

Outras dicas

Parece que o valor de retorno user.get_profile () está vazia e, portanto, ele falhar na próxima is_store () chamada:

return not self.account is None

Isso falhar, porque a auto está vazio (ou seja None).

[editar] Depois de ler este (em Perfis) parece que o perfil para esse usuário não existe e, portanto, você começa a exceção DoesNotExist.

Não é redirecionar essa não é trabalhadora é seu procedimento is_store () ou o perfil não-existente. Você deve verificar o que exatamente é self.account referindo.
Tanto quanto eu posso dizer de olhar para o código, você tem duas tabelas em seu um database- para baseaccount, que só armazena identificação do usuário e da conta, que armazena todos os campos associados a ID de conta + baseaccount. Você pode tentar substituir is_store com algo como isto

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

Eu sou de nenhuma maneira um perito Django, mas eu acho que isso poderia fazer o truque.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top