Django将值填充到外键已设置为b的同一记录中

2024-09-29 23:24:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个django应用程序型号.py如下所示:

class user(models.Model):
    uid=models.IntegerField(unique=True,default=0)
    uname=models.CharField(max_length=50)
    email=models.EmailField()
    password=models.CharField(max_length=20)


    def __unicode__(self):
        return u"{} {}".format(self.uid,self.uname)

    class Meta:
        db_table="user"


class userresp(models.Model):

    uid=models.ForeignKey(user,to_field='uid',null=True,blank=True,on_delete=models.CASCADE)
    resp=models.CharField(max_length=20)
    datetime=models.DateTimeField(default=timezone.now)

    def __unicode__(self):
        return u"{} {}".format(self.uid,self.datetime)

    class Meta:
        db_table="userresp"

一部分视图.py你知道吗

def plogin(request):
    if request.method=='POST':
        username=request.POST['username']
        password=request.POST['password']

        if username and password:
            username_exist=user.objects.filter(uname=username,password=password)

            if not username_exist:
                return render(request,'student/loginfailed.html',)
            else:
                username_exist=user.objects.get(uname=username,password=password)
                userid=user.objects.values_list('uid', flat=True).get(uname=username)
                rep=userresp()
                rep.uid=user.objects.get(uid=userid)
                rep.save()
                return render(request, 'student/loggedin.html', {'username': username_exist,'userid':userid})

    return render(request,'student/plogin.html',)

在这里,我在登录用户时填充了“userresp”表的“uid”外键字段。现在我想在发生这种情况后在另一个视图中填充“resp”字段。但是这个“resp”必须与前面在“plogin”视图中输入的“uid”在同一行中。在这种情况下我怎么做?你知道吗

def mainpage2(request):
    if request.method=='POST':
        response = request.POST.get("audio1", None)

        if response in ["1"]:
            return HttpResponse("you are right!")
        else:
            return HttpResponse("Oops! you got it wrong.")
    else:
        return HttpResponse("invalid user")

//audio1 are a set of radio buttons in my template

Tags: selftrueuidreturnifmodelsrequestdef
1条回答
网友
1楼 · 发布于 2024-09-29 23:24:21

考虑到您的意见,以下是Django方式的答案:

如果您使用Django的contrib.auth,并且除非您构建在现有数据库表之上,这些表阻止您使用它(这就提出了一个问题,为什么在本例中您首先要使用Django),那么没有任何理由使用Django而不是使用contrib.auth(因为这将是使用Django的最大好处之一)德扬戈):

太长了,读不下去了;

在Django中,您可以为要呈现给用户的页面创建视图。如果他们需要登录,你只需声明。例如,通过在urls.py中包装视图声明:

from django.contrib.auth.decorators import login_required

urlpatterns = [
    url(r'^board/$', login_required(DashboardView.as_view()), name='dashboard'),
]

其他一切包括重定向等都由Django内置处理。要根据您的外观设置登录页面的样式,请在template dir中的contrib.auth所需位置创建一个模板(有关详细信息,请参见https://docs.djangoproject.com/en/1.11/topics/auth/default/#the-login-required-decorator)。你知道吗

有一些模块支持双重选择加入、电子邮件、社交媒体等,比如django allauth。你知道吗

经过身份验证的用户作为django.contrib.auth.models.User的实例存储在会话中。你知道吗

获取视图中请求调用的当前已验证用户的User实例的句柄。你知道吗

创建一个引用User(1:1关系)的模型来存储额外的用户数据,如配置文件设置等,或者检查django allauth等人的配置文件设置。(他们已经支持化身之类的东西了。)

您还可以检查权限。所有模型对象都自动创建了不同的基本权限,这些权限已经满足了大多数需求。当然,您可以在上面创建自己的特殊权限。你知道吗

相关问题 更多 >

    热门问题