django - 如何更新数据库中的单个字段,django
问题描述
模型.py 文件
from django.db import models
from django.contrib.auth.models import User
class ClientDetails(models.Model):
objects = models.Manager()
username = models.CharField(max_length=20, unique=True)
gender = models.CharField(max_length=10, choices=GENDER_CHOICES)
Mobile_no = models.IntegerField(blank=True)
address = models.TextField(blank=True)
online = models.BooleanField(default=True)
def __str__(self):
return self.username
class Meta:
verbose_name = 'ClientDetail'
verbose_name_plural = 'ClientDetails'
使用此表单的forms.py 文件我正在存储用户数据用户
from django.forms import models
from django import forms
from Client.models import ClientDetails
class ClientDetailsForm(models.ModelForm):
class Meta:
model = ClientDetails
fields = ['Assignment','email','username','gender', 'Mobile_no', 'address','city','Joining_branch',
'Work_type','candidate_job_level', 'submission_date', 'submission_time',
'candidate_photo', 'created_by', 'amount_paid', 'name','fix_or_custom']
AdminPanel/create_account.html此文件来自 AdminPanel/templates,它创建用户并将数据存储到ClientDeutils
<form action="{% url 'AdminPanel:fixed_target_account'%}" method="POST"
enctype="multipart/form-data">
{% csrf_token %}
<div class='container' style="width:60%;">
<div class="input-affix m-b-10">
<i class="prefix-icon fas fa-at text-black-50"></i>
<input type="text" class="form-control text-dark" name="username" style="border:1px solid gray" placeholder="Username">
</div>
</div>
<div class='container' style="width:60%;">
<div class="input-affix m-b-10">
<i class="prefix-icon anticon anticon-user"></i>
<input type="text" class="form-control text-dark" name="name" style="border:1px solid gray" placeholder="Full Name">
</div>
</div>
<div class='container' style="width:60%;">
<div class="input-affix m-b-10">
<i class="prefix-icon fas fa-genderless"></i>
<select class="form-control text-dark" name="gender" style="border:1px solid gray" required="" id="id_gender">
<option value="" selected="">---------</option>
<option value="Male">Male</option>
<option value="Female">Female</option>
</select>
</div>
</div>
<div class='container' style="width:60%;">
<div class="input-affix m-b-10">
<i class="prefix-icon fas fa-mobile-alt"></i>
<input type="text" class="form-control text-dark" name="Mobile_no" style="border:1px solid gray" placeholder="Mobile No.">
</div>
</div>
<div class='container' style="width:60%;">
<div class="input-affix m-b-10">
<i class="prefix-icon fas fa-map-marker-alt"></i>
<input type="text" class="form-control text-dark" name="address" style="border:1px solid gray" placeholder="Address">
</div>
</div>
<div class='container' style="width:60%;">
<div class="input-affix m-b-10">
<i class="prefix-icon far fa-map"></i>
<input type="text" class="form-control text-dark" name="city" style="border:1px solid gray" placeholder="City">
</div>
</div>
<div class='container' style="width:60%;">
<div class="input-affix m-b-10">
<i class="prefix-icon fas fa-code-branch"></i>
<select class="form-control text-dark" name="Joining_branch" style="border:1px solid gray" required="" id="id_Joining_branch">
<option value="" selected="">---------</option>
<option value="Bhandup West">Bhandup West</option>
</select>
</div>
</div>
<div class='container' style="width:60%;">
<div class="input-affix m-b-10">
<i class="prefix-icon anticon anticon-info-circle"></i>
<select class="form-control text-dark" name="Work_type" style="border:1px solid gray" required="" id="id_Work_type">
<option value="" selected="">---------</option>
<option value="CopyPaste">Copy Paste</option>
<option value="ODT">ODT</option>
</select>
</div>
</div>
<div class='container' style="width:60%;">
<div class="input-affix m-b-10">
<i class="prefix-icon anticon anticon-check-square"></i>
<input type="text" class="form-control text-dark" name="candidate_job_level" style="border:1px solid gray" placeholder="Candidate job level">
</div>
</div>
<div class='container' style="width:60%;">
<div class="input-affix m-b-10">
<i class="prefix-icon anticon anticon-form"></i>
<select style="border:1px solid gray" class="form-control text-dark" name="Assignment" required="" id="id_Assignment">
<option value="" selected="">---------</option>
<option value="Assignment 1">Assignment 1</option>
<option value="Assignment 2">Assignment 2</option>
<option value="Assignment 3">Assignment 3</option>
<option value="Assignment 4">Assignment 4</option>
<option value="Assignment 5">Assignment 5</option>
<option value="Assignment 6">Assignment 6</option>
</select>
</div>
</div>
<div class='container' style="width:60%;">
<div class="input-affix m-b-10">
<i class="prefix-icon far fa-calendar-alt"></i>
<input type="text" class="form-control text-dark" name="submission_date" style="border:1px solid gray" placeholder="Submission Date">
</div>
</div>
<div class='container' style="width:60%;">
<div class="input-affix m-b-10">
<i class="prefix-icon far fa-calendar-times"></i>
<input type="text" class="form-control text-dark" name="submission_time" style="border:1px solid gray" placeholder="Submission time">
</div>
</div>
<div class='container' style="width:60%;">
<div class="input-affix m-b-10">
<i class="prefix-icon anticon anticon-mail"></i>
<input type="text" class="form-control text-dark" name="email" style="border:1px solid gray" placeholder="Email ID">
</div>
</div>
<div class='container' style="width:60%;">
<div class="input-affix m-b-10">
<i class="prefix-icon anticon anticon-smile"></i>
<input type="file" class="form-control text-dark" name="candidate_photo" style="border:1px solid gray" accept="image/*" required="" id="id_candidate_photo">
</div>
</div>
<div class='container' style="width:60%;">
<div class="input-affix m-b-10">
<i class="prefix-icon anticon anticon-user"></i>
<select class="form-control text-dark" name="created_by" style="border:1px solid gray" required="" id="id_created_by">
<option value="" selected="">---------</option>
<option value="1">faijan</option>
</select>
</div>
</div>
<div class='container' style="width:60%;">
<div class="input-affix m-b-10">
<i class="prefix-icon fas fa-rupee-sign"></i>
<input type="text" class="form-control text-dark" name="amount_paid" style="border:1px solid gray" placeholder="Amount Paid">
</div>
</div>
<select hidden name="fix_or_custom" required="" id="id_fix_or_custom">
<option value="Fix" selected >Fix</option>
</select>
<div class="text-center" style="content:50%;">
<button class='btn btn-success btn-lg '>Create</button>
</div>
</form>
这个文件中的AdminPanel/views.py我成功创建了用户并存储了用户数据
def fixed_target_account(request):
if request.method == "POST":
form = ClientDetailsForm(request.POST, request.FILES)
try:
user = User.objects.create_user(request.POST['username'], password=request.POST['Mobile_no'])
user.save()
except IntegrityError:
return render(request, 'AdminPanel/fixed_target_account.html', {'form':ClientDetailsForm,'error':"Username is already been taken."})
if form.is_valid:
newform = form.save(commit=False)
newform.user = request.user
newform.save()
return redirect('AdminPanel:dashboard')
else:
return render(request, 'AdminPanel/fixed_target_account.html', {'form':ClientDetailsForm,'error':"Please enter the valid data."})
else:
pass
return render(request, 'AdminPanel/fixed_target_account.html')
Client/Views.py 文件在这里我想当用户登录时他的在线状态应该设置为 true [即使它是]
def loginuser(request):
''' code for logging in the user also when logged in update staus to active '''
if request.method == "POST":
user = authenticate(username=request.POST['username'], password=request.POST['password'])
login(request, user)
# get the id of the user
pk = request.user.id
ClientDetails.objects.filter(id=pk).update(online=True)
return redirect('Client:dashboard')
else:
return render(request, 'Client/loginuser.html')
当他退出时,他的在线状态应该设置为 False我尝试了其他方法,但它没有更新后端的状态 [在管理员端]
def sign_out(request):
''' before logging out the user update his online status to False '''
pk = request.user.id
print(pk)
ClientDetails.objects.filter(id=pk).update(online=False)
logout(request)
return render(request, 'Client/loginuser.html')
loginuser.html 文件
<div class="card-body">
<div class="d-flex align-items-center justify-content-between m-b-30">
<img class="img-fluid" alt="" src="{% static 'assets/images/logo/logo.png' %}">
<h2 class="m-b-0">Sign In</h2>
</div>
<form action="{% url 'Client:login' %}" method="POST">
{% csrf_token %}
<div class="form-group">
<label class="font-weight-semibold" for="userName">Username:</label>
<div class="input-affix">
<i class="prefix-icon anticon anticon-user"></i>
<input type="text" class="form-control" name="username" id="userName" placeholder="Username">
</div>
</div>
<div class="form-group">
<label class="font-weight-semibold" for="password">Password:</label>
<a class="float-right font-size-13 text-muted" href="">Forget Password?</a>
<div class="input-affix m-b-10">
<i class="prefix-icon anticon anticon-lock"></i>
<input type="password" class="form-control" name="password" id="password" placeholder="Password">
</div>
</div>
<div class="form-group">
<div class="d-flex align-items-center justify-content-between">
<span class="font-size-13 text-muted">
Don't have an account?
<a class="small" href=""> Signup</a>
</span>
<button type="submit" class="btn btn-primary">Sign In</button>
</div>
</div>
</form>
</div>
解决方案
您的ClientDetails
模型实际上并没有以任何方式链接到用于您的用户身份验证的模型。这个模型可能被称为类似 的东西User
,尽管我们不能通过问题中的给定信息来确定这一点。
当您id
从请求中获取当前经过身份验证的用户的 时request.user.id
,这实际上是在引用一个User
实例而不是一个ClientDetails
实例。因此,该行ClientDetails.objects.filter(id=pk)
很可能会为您提供错误的ClientDetails
实例或根本没有,因此update(online=True)
通常不会更新您希望它更新的实例。
因此,您要么必须将您ClientDetails
的外键链接到您的User
对象,然后使用该链接进行查询,或者您可以使用User
实例中的用户名并在查询中使用它,如下所示ClientDetails
:ClientDetails.objects.filter(username=request.user.get_username())
推荐阅读
- sql-server - SQLite - 从列中删除小数
- python - 我可以在 python 中获取一个类的实例来删除自身吗?
- java - vertx中的数据库查询循环以检查值是否存在
- hyperledger-fabric - hyperledger-fabric 中的最大交易大小是多少?
- javascript - 未捕获的类型错误:无法读取未定义的属性“位置”(node.js)
- validation - Vue.js Vee Validate 如何在元素范围内进行验证
- asp.net-core - 获取被扩展类的属性返回空字符串
- jbpm - 多实例的 JBPM 截止日期
- python - 是否有可以导入梯度下降函数/方法的 Python 库?
- bash - mkfifo - 创建一个永远不会遇到 EOF 等的文件