2011-10-04 39 views
0

我爲對象名稱字段設置了選項'primary_key'。之後,我通過命令「syncdb」爲模型創建表格。然後將'unique'選項設置爲True。 Ran'syncdb'。但是當我用我的對象形式工作時,沒有任何唯一性。 如果我使用添加表單,我可以指定已經存在的名稱,並且在結果中它將影響具有此名稱的對象並且沒有任何唯一限制。 但我需要在添加窗體只創建對象,如果已經存在與該名稱的對象將顯示唯一的限制錯誤。 那麼究竟「唯一」選項如何工作以及我應該怎樣做才能以我的方式添加表單?Django。模型字段的唯一選項不起作用

EDIT1:

忘了說,這是所有關於管理網站。

型號:

class Rfxdigest(models.Model): 
     def __unicode__(self): 
      return self.crm_id 
     crm_id = models.CharField(max_length=50, db_column=u'CRM_ID', primary_key=True, unique=True) # Field name made lowercase. 
     Creation_date = models.DateTimeField(db_column=u'Creation_date', default=datetime.now()) # Field name made lowercase. 
     Close_date = models.DateTimeField(null=True, db_column=u'Close_date', blank=True) # Field name made lowercase. 
     Name = models.TextField(db_column=u'Name') # Field name made lowercase. 
     StatusReasonId = models.ForeignKey(Rfxstatusreason, db_column=u'StatusReasonID') # Field name made lowercase. 
     BriefDescription = models.TextField(db_column=u'Brief_description', blank=True) # Field name made lowercase. 
     Notes = models.TextField(db_column=u'Notes', blank=True) # Field name made lowercase. 
     POI = models.TextField(db_column=u'POI', blank=True) # Field name made lowercase. 
     USP = models.TextField(db_column=u'USP', blank=True) # Field name made lowercase. 
     Client_problem = models.TextField(db_column=u'Client_problem', blank=True) # Field name made lowercase. 
     Currency = models.CharField(max_length=10, db_column=u'Currency', blank=True) # Field name made lowercase. 
     Ballpark_begin = models.IntegerField(null=True, db_column=u'Ballpark_begin', blank=True) # Field name made lowercase. 
     Ballpark_end = models.IntegerField(null=True, db_column=u'Ballpark_end', blank=True) # Field name made lowercase. 
     Estimate = models.IntegerField(null=True, db_column=u'Estimate', blank=True) # Field name made lowercase. 
     Ballpark_for_processing = models.IntegerField(null=True, db_column=u'Ballpark_for_processing', blank=True) # Field name made lowercase. 
     Applied_efforts = models.IntegerField(null=True, db_column=u'Applied_efforts', blank=True) # Field name made lowercase. 
     Coordinator = models.TextField(db_column=u'Coordinator', blank=True) # Field name made lowercase. 
     Analyst = models.TextField(db_column=u'Analyst', blank=True) # Field name made lowercase. 
     TechExpert = models.TextField(db_column=u'TechExpert', blank=True) # Field name made lowercase. 
     SalesPerson = models.TextField(db_column=u'SalesPerson', blank=True) # Field name made lowercase. 
     LeadQuality = models.CharField(max_length=10, db_column=u'LeadQuality', blank=True) # Field name made lowercase. 
     Time_frame_is_realistic = models.CharField(max_length=10, db_column=u'Time_frame_is_realistic', blank=True) # Field name made lowercase. 
     RFX_does_match_our_expertise_domain = models.CharField(max_length=10, db_column=u'RFX_does_match_our_expertise_domain', blank=True) # Field name made lowercase. 
     Have_resources_available = models.CharField(max_length=10, db_column=u'Have_resources_available', blank=True) # Field name made lowercase. 
     RFX_is_the_competitors_follow_up = models.CharField(max_length=10, db_column=u'RFX_is_the_competitors_follow_up', blank=True) # Field name made lowercase. 
     RFX_is_the_follow_up_from_our_client = models.CharField(max_length=10, db_column=u'RFX_is_the_follow_up_from_our_client', blank=True) # Field name made lowercase. 
     Have_competitive_edge_over_others = models.CharField(max_length=10, db_column=u'Have_competitive_edge_over_others', blank=True) # Field name made lowercase. 
     Chances_of_winning_proposal_are_less_than_30_percent = models.CharField(max_length=10, db_column=u'Chances_of_winning_proposal_are_less_than_30_percent', blank=True) # Field name made lowercase. 
     Customer_has_own_budget = models.CharField(max_length=10, db_column=u'Customer_has_own_budget', blank=True) # Field name made lowercase. 
     RFX_has_potential_for_followup = models.CharField(max_length=10, db_column=u'RFX_has_potential_for_followup', blank=True) # Field name made lowercase. 
     FP = models.CharField(max_length=10, db_column=u'FP', blank=True) # Field name made lowercase. 
     TM_DT = models.CharField(max_length=10, db_column=u'TM_DT', blank=True) # Field name made lowercase. 
     RFX_is_technically_interested = models.CharField(max_length=10, db_column=u'RFX_is_technically_interested', blank=True) # Field name made lowercase. 
     Customer_provides_good_communication_level = models.CharField(max_length=10, db_column=u'Customer_provides_good_communication_level', blank=True) # Field name made lowercase. 
     The_client_is_well_known_company = models.CharField(max_length=10, db_column=u'The_client_is_well_known_company', blank=True) # Field name made lowercase. 
     Requirements_are_well_clarified = models.CharField(max_length=10, db_column=u'Requirements_are_well_clarified', blank=True) # Field name made lowercase. 
     Project_may_represent_conflict_of_interests = models.CharField(max_length=10, db_column=u'Project_may_represent_conflict_of_interests', blank=True) # Field name made lowercase. 
     RFX_is_the_result_of_company_campaign = models.CharField(max_length=10, db_column=u'RFX_is_the_result_of_company_campaign', blank=True) # Field name made lowercase. 
     RFX_is_an_unexpected_opportunity = models.CharField(max_length=10, db_column=u'RFX_is_an_unexpected_opportunity', blank=True) # Field name made lowercase. 
     RFX_is_part_of_multiproject_work = models.CharField(max_length=10, db_column=u'RFX_is_part_of_multiproject_work', blank=True) # Field name made lowercase. 
     Had_conf_call_with_customer = models.CharField(max_length=10, db_column=u'Had_conf_call_with_customer', blank=True) # Field name made lowercase. 
     Sent_vision = models.CharField(max_length=10, db_column=u'Sent_vision', blank=True) # Field name made lowercase. 
     Sent_BP = models.CharField(max_length=10, db_column=u'Sent_BP', blank=True) # Field name made lowercase. 
     Added_new_initially_unspecified_features = models.CharField(max_length=10, db_column=u'Added_new_initially_unspecified_features', blank=True) # Field name made lowercase. 
     Proposed_different_platform = models.CharField(max_length=10, db_column=u'Proposed_different_platform', blank=True) # Field name made lowercase. 
     class Meta: 
      db_table = u'RFXDigest' 
      verbose_name = 'RFX Digest' 

EDIT2

剛剛創建新的數據庫,並在其上運行執行syncdb。模型具有'獨特=真'。沒有改變。但在這兩個DB這些模型的獨特效果很好:

class Rfxstatusreason(models.Model): 
    def __unicode__(self): 
     return self.statusname 
    id = models.IntegerField(db_column=u'ID', primary_key=True) # Field name made lowercase. 
    statusname = models.CharField(max_length=50, db_column=u'StatusName') # Field name made lowercase. 
    class Meta: 
     db_table = u'RFXStatusReason' 
     verbose_name = 'RFX Status Reason' 

class Rfxclosereasondescription(models.Model): 
    def __unicode__(self): 
     return self.closereason 
    id = models.IntegerField(db_column=u'ID', primary_key=True, auto_created=True) # Field name made lowercase. 
    closereason = models.CharField(max_length=50, db_column=u'CloseReason') # Field name made lowercase. 
    class Meta: 
     db_table = u'RFXCloseReasonDescription' 
     verbose_name = 'RFX Close Reason Description' 

難道這個問題是關於IntegerField和CharField?

回答

0

syncdb不更新表 - see the docs,因爲你已經創建的表您可以

  • 刪除該表並運行syncdb再次
  • 改變表手動
+0

手動更改表格 - 爲名稱添加唯一鍵約束。沒有任何影響。 – sunprophit

+0

@sunprophit因爲它適用於其他人,也許你可能會考慮通過發佈你的模型,表單和視圖代碼給我們提供線索。 –

+0

編輯我的答案。這完全是關於管理員網站,因此表單和視圖幾乎是默認的。只有一些更改管理員來自定義對象的形式。 – sunprophit

0

你可以使用unique
例如:

crm_id = models.CharField(max_length = 50, unique = True, primary_key = True) 

不要忘記丟掉表格syncdb再次。

+0

我無法手動更改數據庫中字段的唯一性?我的意思是已經做到了這一點,併爲True設置了獨特。沒有改變。 – sunprophit

+0

Django無法理解您更改列。你必須更新它。如果您的表中有數據可以使用South。 – 2011-10-04 10:24:20

+0

好的。編輯我的問題。我創建了新的數據庫並在其上運行syncdb。 – sunprophit