2013-11-27 2 views
0

Verifications이라는 모델의 응용 프로그램이 있습니다. 그것은 같은 필드를 가지고 있습니다 : asset_code, Status, Location, Emp_id 등등. 장고 관리 패널에서 "Add Verification"을 사용하여 검증을 추가 할 수 있습니다. 그러나 중복 된 asset_code 항목을 추가하는 것을 제한하려고합니다 (asset_code가 이미있는 경우). asset_code 이미 존재 및 상태 = 1로되어있는 경우django admin에서 모델의 중복 항목을 방지하는 방법

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="") 

상태 필드 (10) I 모델에 항목을 추가 막을 수있는 방법

1 사이의 값을 가질 수 있습니다.

답변

1

추가 unique=True 필드 정의 asset_code

UPDATE :

만 관리자에 대한 :

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 
+0

하지만 사용자 및 관리자의 모든 중복 항목을 제한합니다. 하지만 관리자 패널에서만이를 제한하고 싶습니다. – PK10

+0

나는 내 대답을 – Nikita

+0

업데이트했습니다. 감사합니다. Nikita, 잘 작동합니다. 하지만 한 가지 더, 나는 같은 시간에 2 개의 필터를 넣고 싶습니다. 마치 asset_code가 이미 있고 "status = 1"과 같습니다. 그러면 단지 그것을 제한해야합니다. 그렇지 않으면 asset_code가 존재하고 "status"가 1이 아닌 다른 것이면 ... – PK10

0

당신이 동일한 두 개 이상의 인스턴스를 가진 뜻 asset_code AND 상태는 하나만 상태 = 1이면 괜찮습니까? 또는 asset_code와 status의 조합이 고유해야합니까? 두 번째 경우는 매우 간단합니다

class Verification(models.Model): 
    # your fields here 
    class Meta: 
     unique_together = [("asset_code", "status)] 

첫 번째 경우 (이 어쨌든 오히려 이상한 요구 될하지만 것입니다 ...)되어 더 복잡, 당신이 중 하나는 데이터베이스에 트리거 또는 일부 지정 유효성 검사 필요 모델, cf https://docs.djangoproject.com/en/1.6/ref/models/instances/#django.db.models.Model.validate_unique

오, 예 : 관리자 만이 문제를 방지하려면 ModelAdmin에 대한 ModelForm을 직접 제공하고 유효성 검사 양식을 clean 메서드로 작성해야합니다.

+0

asset_code가 중복되고 status = 1이면 제한해야 함을 의미합니다. status = 1이 아니고 asset_code가 중복되면 해당 항목을 허용해야합니다. – PK10

관련 문제