如何更新数据库中的单个字段,django
how to update single field in database, django
Model.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 文件 使用此表单我正在存储用户数据 user
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, 创建 用户和还将数据存储到 ClientDeatils
<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 file 这里我想当用户登录时他的 online 状态应该设置为 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 我也尝试了其他方法,但它没有更新后端状态 [at管理员端]
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
模型实际上并未以任何方式 linked 到用于您的用户身份验证的模型。这个模型可能被称为 User
,尽管我们无法根据问题中给定的信息确定这一点。
当您使用 request.user.id
从请求中获取当前已验证用户的 id
时,这实际上是在引用 User
实例而不是 ClientDetails
实例。因此,ClientDetails.objects.filter(id=pk)
行很可能会为您提供错误的 ClientDetails
实例或 none,因此 update(online=True)
通常不会更新您希望它更新的实例。
所以你要么必须 link 你的 ClientDetails
和你的 User
对象的外键,然后使用那个 link 来查询,或者你可以大概使用来自 User
实例的用户名,并在您对 ClientDetails
的查询中使用它,如下所示:ClientDetails.objects.filter(username=request.user.get_username())
.
Model.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 文件 使用此表单我正在存储用户数据 user
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, 创建 用户和还将数据存储到 ClientDeatils
<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 file 这里我想当用户登录时他的 online 状态应该设置为 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 我也尝试了其他方法,但它没有更新后端状态 [at管理员端]
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
模型实际上并未以任何方式 linked 到用于您的用户身份验证的模型。这个模型可能被称为 User
,尽管我们无法根据问题中给定的信息确定这一点。
当您使用 request.user.id
从请求中获取当前已验证用户的 id
时,这实际上是在引用 User
实例而不是 ClientDetails
实例。因此,ClientDetails.objects.filter(id=pk)
行很可能会为您提供错误的 ClientDetails
实例或 none,因此 update(online=True)
通常不会更新您希望它更新的实例。
所以你要么必须 link 你的 ClientDetails
和你的 User
对象的外键,然后使用那个 link 来查询,或者你可以大概使用来自 User
实例的用户名,并在您对 ClientDetails
的查询中使用它,如下所示:ClientDetails.objects.filter(username=request.user.get_username())
.