django - 如何在 form.save() 之前限制重复值插入表中
问题描述
我想限制在我的数据库中重复输入“企业名称”。因为我创建了一个表单,函数从模板中获取价值,我将表单数据保存在 DB 中,它工作正常,但在插入 Db 之前它没有检查重复的条目。所以我想要的是代码将检查数据库中是否已经存在的“企业名称”。如果代码中存在的数据应该给出数据已经存在同名的消息,否则数据将被保存。
这是项目中的模型
class SupplierModel(models.Model):
mine_id = models.ForeignKey(MineDetails, on_delete=models.CASCADE, null=True, blank=True)
business_name = models.CharField(max_length=100,null=True,blank=True)
business_website=models.CharField(max_length=100,null=True,blank=True)
name = models.CharField(max_length=200, null=True, blank=True)
mobile_no=models.CharField(max_length=100,default='0000000000',blank=True,null=True)
email= models.EmailField()
pincode= models.TextField(blank=True, null=True)
address= models.CharField(max_length=400, null=True, blank=True)
landmark= models.CharField(max_length=400, null=True, blank=True)
area= models.CharField(max_length=200, null=True, blank=True)
city= models.TextField(default='')
state= models.CharField(max_length=100,blank=True)
map_loc= models.CharField(max_length=400, null=True, blank=True)
pan= models.CharField(max_length=200, null=True, blank=True)
gstin= models.CharField(max_length=200, null=True, blank=True)
notes= models.CharField(max_length=200, null=True, blank=True)
我在视图中写的函数
@login_required
def supplier_add(request, template_name='SupplierDetails.html'):
if request.method == 'POST':
form = SupplierForm(request.POST)
# print("abc")
if form.is_valid():
form.save()
# return HttpResponse("ok saved")
return redirect('inventory_management:supplier_manage')
else:
form = SupplierForm()
# print(form)
# duplicates = SupplierModel.objects.values('business_name').annotate(name_count=Count('business_name')).filter(name_count__gt=1)
# print(duplicates)
# records = SupplierModel.objects.filter(business_name__in=[item['business_name'] for item in duplicates])
return render(request, template_name, {'form': form})
模板
{% extends "base.html" %}
{% block content %}
{% load staticfiles %}
<!--<meta name="viewport" content="width=device-width, initial-scale=1">-->
<!--<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">-->
<!--<link rel="stylesheet" href="{% static '/css/w3.css' %}">-->
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato">
<div class="container">
<div class="row">
<section class="col-md-12">
<h1 class="page-header">Add Supplier Details
<small>   Here you can add/edit basic info of Item supplier</small>
</h1>
<div class="row text-center">
<div class="col-md-12">
<a class="btn btn-primary" href="{% url 'inventory_management:supplier_manage' %}">Manage Supplier</a>
</div>
</div>
<hr>
<!-- Table content -->
<div class="row">
<div class="form-group">
<form class="form-horizontal" method="post" enctype="multipart/form-data" >{% csrf_token %}
<fieldset class="scheduler-border">
<legend class="scheduler-border"><font color="blue">Mine Specific Details</font></legend>
<div class="form-group col-md-12">
<div class="col-md-12">
<div class="col-md-4">
<label for="" class="" id="">Choose Mine:</label>
</div>
<div class="col-md-8">
{{form.mine_id}}
</div>
</div>
</div>
</fieldset>
<fieldset class="scheduler-border">
<legend class="scheduler-border"><font color="blue">Business Details</font></legend>
<div class="form-group col-md-12">
<div class="col-md-6">
<div class="col-md-4">
<label for="id_business_name" class="" id="">Business Name</label>
</div>
<div class="col-md-8">
{{form.business_name}}
</div>
</div>
<div class="col-md-6">
<div class="col-md-4">
<label for="id_business_website" class="" id="">Business Website</label>
</div>
<div class="col-md-8">
{{form.business_website}}
</div>
</div>
</div>
</fieldset>
<fieldset class="scheduler-border">
<legend class="scheduler-border"><font color="blue">Contact Person</font></legend>
<div class="form-group col-md-12">
<div class="col-md-6">
<div class="col-md-4">
<label for="id_name" class="" id="">Name<font color="red">*</font></label>
</div>
<div class="col-md-8">
{{form.name}}
</div>
</div>
<div class="col-md-6">
<div class="col-md-4">
<label for="mobile_no" class="" id="">Mobile Number</label>
</div>
<div class="col-md-8">
{{form.mobile_no}}
</div>
</div>
</div>
<div class="form-group col-md-12">
<div class="col-md-6">
<div class="col-md-4">
<label for="id_email" class="" id="">Email</label>
</div>
<div class="col-md-8">
{{form.email}}
</div>
</div>
</div>
</fieldset>
<fieldset class="scheduler-border">
<legend class="scheduler-border"><font color="blue">Billing Address</font></legend>
<div class="form-group col-md-12">
<div class="col-md-6">
<div class="col-md-4">
<label for="pin" class="" id="">Pincode</label>
</div>
<div class="col-md-8">
{{form.pincode}}
</div>
</div>
<div class="col-md-6">
<div class="col-md-4">
<label for="address" class="" id="">Address</label>
</div>
<div class="col-md-8">
{{form.address}}
</div>
</div>
</div>
<div class="form-group col-md-12">
<div class="col-md-6">
<div class="col-md-4">
<label for="landmark" class="" id="">Landmark</label>
</div>
<div class="col-md-8">
{{form.landmark}}
</div>
</div>
<div class="col-md-6">
<div class="col-md-4">
<label for="id_area" class="" id="">Area</label>
</div>
<div class="col-md-8">
{{form.area}}
</div>
</div>
</div>
<div class="form-group col-md-12">
<div class="col-md-6">
<div class="col-md-4">
<label for="id_city" class="" id="">City</label>
</div>
<div class="col-md-8">
{{form.city}}
</div>
</div>
<div class="col-md-6">
<div class="col-md-4">
<label for="id_state" class="" id="">State</label>
</div>
<div class="col-md-8">
{{form.state}}
</div>
</div>
<br/><br/> <br/><br/>
<div class="form-group col-md-12">
<div class="col-md-6">
<div class="col-md-4">
<label for="id_map_location" class="" id="">Map Location</label>
</div>
<div class="col-md-8">
{{form.map_loc}}
</div>
</div>
</div>
</fieldset>
<fieldset class="scheduler-border">
<legend class="scheduler-border"><font color="blue">Tax Details</font></legend>
<div class="form-group col-md-12">
<div class="col-md-6">
<div class="col-md-4">
<label for="id_pan" class="" id="">PAN /TIN</label>
</div>
<div class="col-md-8">
{{form.pan}}
</div>
</div>
<div class="col-md-6">
<div class="col-md-4">
<label for="id_gstin" class="" id="">GSTIN</label>
</div>
<div class="col-md-8">
{{form.gstin}}
</div>
</div>
</div>
<div class="form-group col-md-12">
<div class="col-md-6">
<div class="col-md-4">
<label for="id_notes" class="" id="">Notes</label>
</div>
<div class="col-md-8">
{{form.notes}}
</div>
</div>
</div>
</fieldset>
<div class="text-center">
<input type="submit" class="btn btn-primary" value="Submit"/>
</div>
</form>
</div>
</div><!--end Table content -->
</section>
</div>
</div>
<style>
fieldset.scheduler-border {
border: solid 1px #DDD !important;
padding: 0 10px 10px 10px;
border-bottom: none;
}
legend.scheduler-border {
width: auto !important;
border: none;
font-size: 14px;
}
fieldset ul {list-style:none}
</style>
<script>
$(document).ready(function(){
$("#id_mine_id").addClass('form-control');
});
$(function() {
$( ".datepicker" ).datepicker({
changeMonth: true,
changeYear: true,
yearRange: "1900:2012",
// You can put more options here.
});
});
</script>
{% endblock %}
解决方案
您应该添加unique=True
到模型中的定义business_name
。
推荐阅读
- reactjs - 将旧的 React 语法重写为新的
- scala - Scala过滤器从字符串列表中过滤ID不起作用
- javascript - 是否可以在内存中加载文档?
- c# - HQL 和 Linq 的 NHibernate IUserType 和自定义函数
- php - Laravel - 如何清除数组语言的缓存
- node.js - MalformedResponse expected_inputs[0].input_prompt.rich_initial_prompt:“carousel_browse”仅支持支持 Web 浏览器的客户端
- javascript - PHP 将 PHP 数据传递到 JS 数组中
- haskell - 为什么surfaceDimensions(出现)返回一个双封闭向量(V2 V2 CInt)?
- php - 从 Eclipse PHPUnitLogger 错误和端口 7478 错误运行 PHPUnit
- python - 如何将来自ansible play的大型json结果传递给python脚本