Django在一个新的应用程序中添加新的模型和表单

时间:2013-11-11 19:27:13

标签: python django django-models django-views

我正在使用Django并尝试添加一个只能在用户登录后才能访问的新模型。首先,我使用

在应用程序中构建了一个UserProfile模型类
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        UserProfile.objects.create(user=instance) 
post_save.connect(create_user_profile, sender=User)

将模型同步到数据库中,通过调用UserProfile = request.user.get_profile()可以很好地工作,然后我构建了名为" ControlInformation"的Anther模型类。在另一个应用程序(称为"控制"),使用

def create_control_information(sender, instance, created, **kwargs):
    if created:
        ControlInformation.objects.create(user=instance)
post_save.connect(create_control_information, sender=User)

同步此模型,但是通过调用Current_Status = request.user.get_profile()来使用此模型中的信息存在一些问题,这是"' UserProfile'对象没有属性' turn_on_off'"在views.py。中调用on_off = Current_Status.turn_on_off时。

我是否正确在另一个应用程序中的一个型号上构建这个?或者还有其他问题吗?

编辑: 我的ControlInformation模型是这样的:

class ControlInformation(models.Model):
    user = models.OneToOneField(User)

    TURN_ON_OFF = (
        ('ON', 'On'),
        ('OFF', 'Off'),
    )

    AUTO_MANU = (
        ('ON', 'On'),
        ('OFF', 'Off'),
    )

    TEMP_DINNINGROOM = (
        ('HIGH', 'High'),
        ('MEDIUM', 'Medium'),
        ('LOW', 'Low'),
    )

    TEMP_LIVINGROOM = (
        ('HIGH', 'High'),
        ('MEDIUM', 'Medium'),
        ('LOW', 'Low'),
    )

    turn_on_off = models.CharField(max_length=1, choices=TURN_ON_OFF)
    auto_manu = models.CharField(max_length = 1, choices=AUTO_MANU)
    temp_dinningroom = models.CharField(max_length=1, choices=TEMP_DINNINGROOM)
    temp_livingroom = models.CharField(max_length=1, choices=TEMP_LIVINGROOM)

#signal function: if a user is created, add control information to the user    
def create_control_information(sender, instance, created, **kwargs):
    if created:
        ControlInformation.objects.create(user=instance)

post_save.connect(create_control_information, sender=User)

然后我在views.py中使用这个模型:

def current_status(request):
    if not request.user.is_authenticated():
        return HttpResponseRedirect('/keenhome/accounts/login/')
    Current_Status = request.user.get_profile()  

    on_off = Current_Status.turn_on_off
    auto_manu = Current_Status.auto_manu
    temp_dinningroom = Current_Status.temp_dinningroom
    temp_livingroom = Current_Status.temp_livingroom

    context = {'on_off': on_off,
               'auto_manu': auto_manu,
               'temp_dinningroom': temp_dinningroom, 
               'temp_livingroom': temp_livingroom,
               }
    return render(request, 'control/current_control_status.html', context)

on_off = Current_Status.turn_on_off是问题发生的地方。 (' UserProfile'对象没有属性' auto_manu')

1 个答案:

答案 0 :(得分:1)

由于您已经有request.user.get_profile()返回UserProfile模型,因此在这种情况下您正在寻找ControlInformation个对象。所以,只需改变

Current_Status = request.user.get_profile()  

Current_Status = ControlInformation.objects.get(user=request.user)

或者,

from django.shortcuts import get_object_or_404
Current_Status = get_object_or_404(ControlInformation, user=request.user)