#python #django #django-models #django-views
#python #django #django-модели #django-представления
Вопрос:
Я пытаюсь использовать модель из одного приложения в представлениях другого, но Django не распознает ее имя и выдает следующую ошибку:
local variable 'user_status' referenced before assignment
Это моя модель:
class user_status(models.Model):
name = models.CharField(max_length=500)
code = models.IntegerField()
def __unicode__(self):
return u'%s' % self.name
Это мое мнение:
def verifica_pgto(request):
if request.user.is_authenticated():
user = request.user
date_joined = user.date_joined.replace(tzinfo=None)
dif = datetime.now() - date_joined
try:
user_details = UserDetails.objects.get(user=user)
if user_details.status == 'ativo':
params = {'user_status':'ativo'}
else:
params = {'user_status':'inativo'}
except:
# cria user details
if dif.total_seconds() > 7:
status = 'inativo'
user_status = user_status.objects.get(name = 'inativo')
else:
status = 'ativo'
user_status = user_status.objects.get(name = 'inativo')
d = UserDetails(
user = user,
created_at = datetime.now(),
status = user_status,
end_access = dt.timedelta(days=7)
)
d.save()
if user_status == '':
params = {'user_status':'ativo'}
else:
params = {'user_status':'inativo'}
return params
Вот как я импортирую модель в views.py
from payments.models import *
Я также пробовал этот способ:
from payments.models import *
from payments.models import user_status
Комментарии:
1. используйте другое имя переменной
user_status
для объекта модели.2. Вам нужно сделать отступ в
if user_status
блоке вexcept
, чтобы устранить проблему..3. Вот почему хорошей идеей является использование имен в верблюжьем регистре для имен классов. В вашем случае UserStatus было бы лучшим названием для вашей модели.
Ответ №1:
Старайтесь не использовать имя экземпляра, совпадающее с именем класса.Попробуйте это:
from django.shortcuts import get_object_or_404
from payments.models import user_status
def verifica_pgto(request):
if ....
us = get_object_or_404(user_status)
......
us.objects.get(name = 'inativo')
....
Комментарии:
1. Не используйте
get_object_or_404
— очевидно, OP не хочет создавать 4042. спасибо, но теперь я получаю сообщение об ошибке ‘ожидаемая строка или буфер’
3. вам нужно вернуться
json.dumps(params)
— Посмотрите наrender
метод4. @karthikr спасибо, но не совсем, потому что ошибка возникает в строке «d.save()», а не в строке «возвращаемые параметры»