我的应用程序有一个名为Verifications
的模型。它有以下字段:asset_code,Status,Location,Emp_id等。我可以使用django管理面板中的“添加验证”添加验证。但我想限制添加重复的asset_code条目(如果asset_code已经存在)。
class Verification(models.Model):
asset_code = models.CharField(verbose_name="Asset Code",max_length=16, default="")
scan_time = models.DateTimeField(verbose_name="Time of smartDNA scan",auto_now_add=True,default=datetime.datetime.now)
credential = models.CharField(verbose_name="smartDNA Credential",max_length=16, default="")
status = models.IntegerField(verbose_name="Scanning Status",choices=STATUS_CHOICES,default=1)
operator = models.CharField(verbose_name="Operator",max_length=16, default="")
location = models.CharField(verbose_name="Branch",max_length=64, default="")
auth_code = models.CharField(verbose_name="Scanner Authentication",max_length=20, default="DSC(Verisign")
emp_id = models.CharField(verbose_name="EMP ID",max_length=16, default="")
image = models.CharField(verbose_name="Image",max_length=24, default="dd")
created = models.DateTimeField(verbose_name="Created on",blank=True,auto_now_add=True)
modified = models.DateTimeField(verbose_name="Modified on",blank=True,auto_now=True)
product_details = models.CharField(verbose_name="Product Details",max_length=64, default="")
“状态”字段的值可以介于1到10之间。
如果asset_code已存在且状态= 1,我该如何阻止在模型中添加条目。
答案 0 :(得分:1)
将unique=True
添加到asset_code
字段定义
<强>更新强>
仅适用于管理员:
admin.py
from django import forms
class VerificationAdminForm(forms.ModelForm):
class Meta:
model = Verification
def clean_asset_code(self):
asset_code = self.cleaned_data['asset_code']
if Verification.objects.filter(asset_code=asset_code).exists():
raise forms.ValidationError("This asset code already exist.")
return asset_code
class VerificationAdmin(admin.ModelAdmin):
form = VerificationAdminForm
答案 1 :(得分:0)
你的意思是说有两个或更多具有相同asset_code和状态的实例是正常的,只要只有一个具有status = 1?或者asset_code和status的组合应该是唯一的?如果是第二个,那很简单:
class Verification(models.Model):
# your fields here
class Meta:
unique_together = [("asset_code", "status)]
第一种情况(这是一个相当奇怪的要求,但无论如何......)更多涉及,您需要在数据库中使用触发器或在模型中进行一些自定义验证,参见https://docs.djangoproject.com/en/1.6/ref/models/instances/#django.db.models.Model.validate_unique
哦,是的:如果您只是想在管理员中阻止这种情况,您应该为ModelAdmin提供自己的ModelForm,并使用clean
方法的形式编写验证。