модель не распознается

#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 не хочет создавать 404

2. спасибо, но теперь я получаю сообщение об ошибке ‘ожидаемая строка или буфер’

3. вам нужно вернуться json.dumps(params) — Посмотрите на render метод

4. @karthikr спасибо, но не совсем, потому что ошибка возникает в строке «d.save()», а не в строке «возвращаемые параметры»