Django는 작동하지 않습니다
-
10-07-2019 - |
문제
문제를 볼 수 있고 코드와 오류 페이지를 첨부했습니다.
내 템플릿에는 다음과 같습니다.
{% 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 전문가가 아니지만 이것이 트릭을 수행 할 수 있다고 생각합니다.
제휴하지 않습니다 StackOverflow