Джанго.Не работает уникальная опция для модельного поля - PullRequest
0 голосов
/ 04 октября 2011

Я установил параметр 'primary_key' для поля Имя объекта. После этого я создаю таблицы для моделей с помощью команды 'syncdb'. Затем установите уникальную опцию в True. Ран 'syncdb'. Но когда я работаю со своей формой объекта, нет никакой уникальности. Если я работаю с формой добавления, я могу указать уже существующее имя, и в результате это повлияет на объект с этим именем и без каких-либо уникальных ограничений. Но мне нужно в форме добавления только создавать объекты, и если уже существует объект с таким именем, будет показана уникальная ошибка ограничения. Так как же работает «уникальный» вариант и что мне нужно сделать, чтобы добавить форму на моем пути?

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. Модель имеет «уникальный = True». Ничего не изменилось. Но в обеих БД уникальность этих моделей сработала хорошо:

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?

Ответы [ 2 ]

0 голосов
/ 04 октября 2011

Вы можете использовать unique
Например:

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

Не забудьте бросить стол, а потом syncdb.

0 голосов
/ 04 октября 2011

syncdb не обновляет таблицу - см. Документы , так как вы уже создали таблицу, вы можете либо

  • Бросить стол и снова запустить syncdb
  • Изменить таблицу вручную
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...