Finish converting models.CompositeField to Meta.unique_together
authorNicolas Iooss <nicolas.iooss_git@polytechnique.org>
Sun, 20 Sep 2015 20:20:56 +0000 (22:20 +0200)
committerNicolas Iooss <nicolas.iooss_git@polytechnique.org>
Sun, 20 Sep 2015 20:20:56 +0000 (22:20 +0200)
database/platal/models.py

index 7ab61b9..41f66a3 100644 (file)
@@ -420,7 +420,7 @@ class AccountProfile(models.Model):
 
 @python_2_unicode_compatible
 class AccountAuthOpenid(models.Model):
-    #id = models.IntegerField(primary_key=True)
+    id = models.IntegerField(primary_key=True)
     account = models.ForeignKey(Account, unique=True, null=True, db_column='uid', blank=True)
     url = models.CharField(max_length=255, unique=True)
 
@@ -462,7 +462,7 @@ class AccountXnetLostPassword(models.Model):
 
 @python_2_unicode_compatible
 class Announce(models.Model):
-    #id = models.IntegerField(primary_key=True)
+    id = models.IntegerField(primary_key=True)
     account = models.ForeignKey(Account, null=True, db_column='uid', blank=True)
     creation_date = models.DateTimeField()
     titre = models.CharField(max_length=765)
@@ -749,7 +749,7 @@ class PaymentMethod(models.Model):
 
 @python_2_unicode_compatible
 class PaymentReconcilation(models.Model):
-    #id = models.IntegerField(primary_key=True)
+    id = models.IntegerField(primary_key=True)
     method = models.ForeignKey(PaymentMethod)
     period_start = models.DateField()
     period_end = models.DateField()
@@ -793,7 +793,7 @@ class PaymentTransaction(models.Model):
 
 @python_2_unicode_compatible
 class PaymentTransfer(models.Model):
-    #id = models.IntegerField(primary_key=True)
+    id = models.IntegerField(primary_key=True)
     recongroup_id = models.IntegerField()
     payment = models.ForeignKey(Payment)
     amount = models.DecimalField(max_digits=11, decimal_places=2)
@@ -916,7 +916,7 @@ class GroupFormerMember(models.Model):
 
 @python_2_unicode_compatible
 class GroupAnnounce(models.Model):
-    #id = models.IntegerField(primary_key=True)
+    id = models.IntegerField(primary_key=True)
     account = models.ForeignKey(Account, null=True, db_column='uid', blank=True)
     asso = models.ForeignKey(Group)
     create_date = models.DateTimeField()
@@ -1014,7 +1014,6 @@ class GroupEventItem(models.Model):
 class GroupEventParticipant(models.Model):
     event = models.ForeignKey(GroupEvent, db_column='eid')
     account = models.ForeignKey(Account, db_column='uid')
-    item = models.ForeignKey(GroupEventItem, to_field='pkey')
     nb = models.IntegerField()
     flags = models.CharField(max_length=14)
     paid = models.FloatField()
@@ -1034,7 +1033,7 @@ class GroupEventParticipant(models.Model):
 
 @python_2_unicode_compatible
 class GroupAuth(models.Model):
-    #id = models.IntegerField(primary_key=True)
+    id = models.IntegerField(primary_key=True)
     privkey = models.CharField(max_length=120, unique=True)
     name = models.CharField(max_length=96)
     datafields = models.CharField(max_length=765)
@@ -1138,7 +1137,7 @@ class LogEvent(models.Model):
 
 @python_2_unicode_compatible
 class Newsletter(models.Model):
-    #id = models.IntegerField(primary_key=True)
+    id = models.IntegerField(primary_key=True)
     group = models.ForeignKey(Group, unique=True)
     name = models.CharField(max_length=765)
     criteria = models.CharField(max_length=42, blank=True)
@@ -1454,7 +1453,7 @@ class ProfileAddress(models.Model):
 
 @python_2_unicode_compatible
 class ProfileAddressComponentEnum(models.Model):
-    #id = models.BigIntegerField(primary_key=True)
+    id = models.BigIntegerField(primary_key=True)
     short_name = models.CharField(max_length=765)
     long_name = models.CharField(max_length=765)
     types = models.CharField(max_length=891)
@@ -1605,6 +1604,7 @@ class ProfileEducationEnum(models.Model):
     abbreviation = models.CharField(max_length=765)
     url = models.CharField(max_length=765, blank=True)
     country = models.ForeignKey(GeolocCountry, null=True, db_column='country', blank=True)
+
     class Meta:
         db_table = 'profile_education_enum'
 
@@ -1787,12 +1787,12 @@ class ProfileJobTermSearch(models.Model):
 class ProfileJobTerm(models.Model):
     profile = models.ForeignKey(Profile, db_column='pid')
     company = models.ForeignKey(ProfileJobEnum, db_column='jid')
-    job = models.ForeignKey(ProfileJob, to_field='pkey')
     job_term = models.ForeignKey(ProfileJobTermEnum, db_column='jtid')
     computed = models.CharField(max_length=24)
-    pkey = models.CompositeField(profile, company, job_term, primary_key=True)
+
     class Meta:
         db_table = 'profile_job_term'
+        unique_together = (('pid', 'jid', 'jtid'),)
 
     def __str__(self):
         return "%s at %s: %s" % (self.profile.hrpid, self.company.name, self.job_term.name)
@@ -1802,9 +1802,10 @@ class ProfileJobTerm(models.Model):
 class ProfileJobEntrepriseTerm(models.Model):
     job = models.ForeignKey(ProfileJobEnum, db_column='eid')
     job_term = models.ForeignKey(ProfileJobTermEnum, db_column='jtid')
-    pkey = models.CompositeField(job, job_term, primary_key=True)
+
     class Meta:
         db_table = 'profile_job_entreprise_term'
+        unique_together = (('eid', 'jtid'),)
 
     def __str__(self):
         return "%s: %s" % (self.job.name, self.job_term.name)
@@ -1821,6 +1822,7 @@ class ProfileLangSkillEnum(models.Model):
     language_en = models.CharField(max_length=765)
     iso_639_2t = models.CharField(max_length=9)
     iso_639_1 = models.CharField(max_length=6, blank=True)
+
     class Meta:
         db_table = 'profile_langskill_enum'
 
@@ -1832,10 +1834,11 @@ class ProfileLangSkillEnum(models.Model):
 class ProfileLangSkill(models.Model):
     profile = models.ForeignKey(Profile, db_column='pid')
     lang = models.ForeignKey(ProfileLangSkillEnum, db_column='lid')
-    pkey = models.CompositeField(profile, lang, primary_key=True)
     level = models.IntegerField(null=True, blank=True)
+
     class Meta:
         db_table = 'profile_langskills'
+        unique_together = (('pid', 'lid'),)
 
     def __str__(self):
         return "%s: %s" % (self.profile.hrpid, self.lang.iso_639_2b)
@@ -1848,6 +1851,7 @@ class ProfileSkillEnum(models.Model):
     text_en = models.CharField(max_length=330)
     flags = models.CharField(max_length=15)
     axfreetext = models.TextField()
+
     class Meta:
         db_table = 'profile_skill_enum'
 
@@ -1859,10 +1863,11 @@ class ProfileSkillEnum(models.Model):
 class ProfileSkill(models.Model):
     profile = models.ForeignKey(Profile, db_column='pid')
     skill = models.ForeignKey(ProfileSkillEnum, db_column='cid')
-    pkey = models.CompositeField(profile, skill, primary_key=True)
     level = models.CharField(max_length=54)
+
     class Meta:
         db_table = 'profile_skills'
+        unique_together = (('pid', 'cid'),)
 
     def __str__(self):
         return "%s: %s" % (self.profile.hrpid, self.skill.text_en)
@@ -1873,11 +1878,12 @@ class ProfileSkill(models.Model):
 
 
 class ProfileMedalEnum(models.Model):
-    #id = models.IntegerField(primary_key=True)
+    id = models.IntegerField(primary_key=True)
     type = models.CharField(max_length=30)
     text = models.CharField(max_length=765, blank=True)
     img = models.CharField(max_length=765, blank=True)
     flags = models.CharField(max_length=63)
+
     class Meta:
         db_table = 'profile_medal_enum'
 
@@ -1885,22 +1891,23 @@ class ProfileMedalEnum(models.Model):
 class ProfileMedalGradeEnum(models.Model):
     medal = models.ForeignKey(ProfileMedalEnum, db_column='mid')
     gid = models.IntegerField()
-    pkey = models.CompositeField(medal, gid, primary_key=True)
     text = models.CharField(max_length=765, blank=True)
     pos = models.IntegerField()
+
     class Meta:
         db_table = 'profile_medal_grade_enum'
+        unique_together = (('medal', 'gid'),)
 
 
 class ProfileMedal(models.Model):
     profile = models.ForeignKey(Profile, db_column='pid')
     medal = models.ForeignKey(ProfileMedalEnum)
     gid = models.IntegerField()
-    grade = models.ForeignKey(ProfileMedalGradeEnum, to_field='pkey')
-    pkey = models.CompositeField(profile, medal, gid, primary_key=True)
     level = models.CharField(max_length=18)
+
     class Meta:
         db_table = 'profile_medals'
+        unique_together = (('pid', 'medal', 'gid'),)
 
 
 # Profile::mentor
@@ -1910,6 +1917,7 @@ class ProfileMedal(models.Model):
 class ProfileMentor(models.Model):
     profile = models.OneToOneField(Profile, primary_key=True, db_column='pid')
     expertise = models.TextField()
+
     class Meta:
         db_table = 'profile_mentor'
 
@@ -1917,17 +1925,19 @@ class ProfileMentor(models.Model):
 class ProfileMentorCountry(models.Model):
     profile = models.ForeignKey(Profile, db_column='pid')
     country = models.ForeignKey(GeolocCountry, db_column='country')
-    pkey = models.CompositeField(profile, country, primary_key=True)
+
     class Meta:
         db_table = 'profile_mentor_country'
+        unique_together = (('pid', 'country'),)
 
 
 class ProfileMentorTerm(models.Model):
     profile = models.ForeignKey(Profile, db_column='pid')
     job_term = models.ForeignKey(ProfileJobTermEnum, db_column='jtid')
-    pkey = models.CompositeField(profile, job_term, primary_key=True)
+
     class Meta:
         db_table = 'profile_mentor_term'
+        unique_together = (('pid', 'jtid'),)
 
 
 # Profile::partner
@@ -1935,7 +1945,7 @@ class ProfileMentorTerm(models.Model):
 
 
 class ProfilePartnersharingEnum(models.Model):
-    #id = models.IntegerField(primary_key=True)
+    id = models.IntegerField(primary_key=True)
     api_account = models.ForeignKey(Account, null=True, db_column='api_uid', blank=True)
     shortname = models.CharField(max_length=192)
     name = models.CharField(max_length=765)
@@ -1943,6 +1953,7 @@ class ProfilePartnersharingEnum(models.Model):
     default_sharing_level = models.CharField(max_length=21, blank=True)
     has_directory = models.IntegerField()
     has_bulkmail = models.IntegerField()
+
     class Meta:
         db_table = 'profile_partnersharing_enum'
 
@@ -1950,19 +1961,21 @@ class ProfilePartnersharingEnum(models.Model):
 class ProfilePartnersharingSetting(models.Model):
     profile = models.ForeignKey(Profile, db_column='pid')
     partner = models.ForeignKey(ProfilePartnersharingEnum)
-    pkey = models.CompositeField(profile, partner, primary_key=True)
     exposed_uid = models.CharField(max_length=765)
     sharing_level = models.CharField(max_length=21, blank=True)
     allow_email = models.CharField(max_length=18, blank=True)
     last_connection = models.DateTimeField(null=True, blank=True)
+
     class Meta:
         db_table = 'profile_partnersharing_settings'
+        unique_together = (('pid', 'partner'),)
 
 
 class ProfilePhotoToken(models.Model):
     profile = models.ForeignKey(Profile, primary_key=True, db_column='pid')
     token = models.CharField(max_length=765)
     expires = models.DateTimeField()
+
     class Meta:
         db_table = 'profile_photo_tokens'
 
@@ -1978,6 +1991,7 @@ class ProfileMergeIssue(models.Model):
     deathdate_ax = models.DateField(null=True, blank=True)
     name = models.CharField(max_length=765, blank=True)
     name_type = models.IntegerField(null=True, blank=True)
+
     class Meta:
         db_table = 'profile_merge_issues'
 
@@ -1986,19 +2000,21 @@ class ProfileModification(models.Model):
     profile = models.ForeignKey(Profile, db_column='pid')
     account = models.ForeignKey(Account, db_column='uid')
     field = models.CharField(max_length=180)
-    pkey = models.CompositeField(profile, field, primary_key=True)
     oldtext = models.TextField(db_column='oldText')
     newtext = models.TextField(db_column='newText')
     type = models.CharField(max_length=33)
     timestamp = models.DateTimeField()
+
     class Meta:
         db_table = 'profile_modifications'
+        unique_together = (('pid', 'field'),)
 
 
 class ProfileVisibilityEnum(models.Model):
     access_level = models.CharField(max_length=21, blank=True, primary_key=True)
     best_display_level = models.CharField(max_length=21, blank=True)
     display_levels = models.CharField(max_length=72, blank=True)
+
     class Meta:
         db_table = 'profile_visibility_enum'
 
@@ -2007,6 +2023,7 @@ class ProfileVisibilityEnum(models.Model):
 class ProfileDeltaten(models.Model):
     profile = models.OneToOneField(Profile, primary_key=True, db_column='pid')
     message = models.TextField()
+
     class Meta:
         db_table = 'profile_deltaten'
 
@@ -2016,12 +2033,13 @@ class ProfileDeltaten(models.Model):
 
 
 class ReminderType(models.Model):
-    #type_id = models.IntegerField(primary_key=True)
+    type_id = models.IntegerField(primary_key=True)
     name = models.CharField(max_length=255, unique=True)
     weight = models.IntegerField()
     remind_delay_yes = models.IntegerField()
     remind_delay_no = models.IntegerField()
     remind_delay_dismiss = models.IntegerField()
+
     class Meta:
         db_table = 'reminder_type'
 
@@ -2029,16 +2047,17 @@ class ReminderType(models.Model):
 class Reminder(models.Model):
     account = models.ForeignKey(Account, db_column='uid')
     type = models.ForeignKey(ReminderType)
-    pkey = models.CompositeField(account, type, primary_key=True)
     status = models.CharField(max_length=21)
     remind_last = models.DateTimeField()
     remind_next = models.DateTimeField(null=True, blank=True)
+
     class Meta:
         db_table = 'reminder'
+        unique_together = (('uid', 'type'),)
 
 
 class ReminderTip(models.Model):
-    #id = models.IntegerField(primary_key=True)
+    id = models.IntegerField(primary_key=True)
     title = models.CharField(max_length=192)
     text = models.TextField()
     priority = models.IntegerField()
@@ -2046,6 +2065,7 @@ class ReminderTip(models.Model):
     promo_min = models.IntegerField()
     promo_max = models.IntegerField()
     state = models.CharField(max_length=18)
+
     class Meta:
         db_table = 'reminder_tips'
 
@@ -2055,7 +2075,7 @@ class ReminderTip(models.Model):
 
 
 class Survey(models.Model):
-    #id = models.IntegerField(primary_key=True)
+    id = models.IntegerField(primary_key=True)
     questions = models.TextField()
     title = models.CharField(max_length=765)
     description = models.TextField()
@@ -2063,23 +2083,26 @@ class Survey(models.Model):
     end = models.DateField()
     mode = models.IntegerField()
     promos = models.CharField(max_length=765)
+
     class Meta:
         db_table = 'surveys'
 
 
 class SurveyVote(models.Model):
-    #id = models.IntegerField(primary_key=True)
+    id = models.IntegerField(primary_key=True)
     survey = models.ForeignKey(Survey)
     account = models.ForeignKey(Account, null=True, db_column='uid', blank=True)
+
     class Meta:
         db_table = 'survey_votes'
 
 
 class SurveyAnswer(models.Model):
-    #id = models.IntegerField(primary_key=True)
+    id = models.IntegerField(primary_key=True)
     vote = models.ForeignKey(SurveyVote)
     question_id = models.IntegerField()
     answer = models.TextField()
+
     class Meta:
         db_table = 'survey_answers'
 
@@ -2104,6 +2127,7 @@ class GappsAccount(models.Model):
     r_creation = models.DateField(null=True, blank=True)
     r_last_login = models.DateField(null=True, blank=True)
     r_last_webmail = models.DateField(null=True, blank=True)
+
     class Meta:
         db_table = 'gapps_accounts'
 
@@ -2112,6 +2136,7 @@ class GappsNickname(models.Model):
     l_userid = models.ForeignKey(Account, null=True, db_column='l_userid', blank=True)
     g_account_name = models.CharField(max_length=768)
     g_nickname = models.CharField(max_length=255, primary_key=True)
+
     class Meta:
         db_table = 'gapps_nicknames'
 
@@ -2132,6 +2157,7 @@ class GappsQueue(models.Model):
     r_softfail_date = models.DateTimeField(null=True, blank=True)
     r_softfail_count = models.IntegerField()
     r_result = models.CharField(max_length=768, blank=True)
+
     class Meta:
         db_table = 'gapps_queue'
 
@@ -2148,6 +2174,7 @@ class GappsReporting(models.Model):
     count_90_day_idle = models.IntegerField(null=True, blank=True)
     usage_in_bytes = models.BigIntegerField(null=True, blank=True)
     quota_in_mb = models.IntegerField(null=True, blank=True)
+
     class Meta:
         db_table = 'gapps_reporting'
 
@@ -2162,6 +2189,7 @@ class Watch(models.Model):
     flags = models.CharField(max_length=39)
     actions = models.CharField(max_length=105)
     last = models.DateTimeField()
+
     class Meta:
         db_table = 'watch'
 
@@ -2169,34 +2197,38 @@ class Watch(models.Model):
 class WatchGroup(models.Model):
     account = models.ForeignKey(Account, db_column='uid')
     group = models.ForeignKey(Group, db_column='groupid')
-    pkey = models.CompositeField(account, group, primary_key=True)
+
     class Meta:
         db_table = 'watch_group'
+        unique_together = (('uid', 'groupid'),)
 
 
 class WatchNonins(models.Model):
     account = models.ForeignKey(Account, db_column='uid', related_name='watching')
     watched = models.ForeignKey(Account, db_column='ni', related_name='watched_by')
-    pkey = models.CompositeField(account, watched, primary_key=True)
+
     class Meta:
         db_table = 'watch_nonins'
+        unique_together = (('uid', 'ni'),)
 
 
 class WatchProfile(models.Model):
     profile = models.ForeignKey(Profile, db_column='pid')
     ts = models.DateTimeField()
     field = models.CharField(max_length=36)
-    pkey = models.CompositeField(profile, field, primary_key=True)
+
     class Meta:
         db_table = 'watch_profile'
+        unique_together = (('pid', 'field'),)
 
 
 class WatchPromo(models.Model):
     account = models.ForeignKey(Account, db_column='uid')
     promo = models.IntegerField()
-    pkey = models.CompositeField(account, promo, primary_key=True)
+
     class Meta:
         db_table = 'watch_promo'
+        unique_together = (('uid', 'promo'),)
 
 
 # Postfix
@@ -2207,6 +2239,7 @@ class MxWatch(models.Model):
     host = models.CharField(max_length=192, primary_key=True)
     state = models.CharField(max_length=21, blank=True)
     text = models.TextField()
+
     class Meta:
         db_table = 'mx_watch'
 
@@ -2214,6 +2247,7 @@ class MxWatch(models.Model):
 class PostfixBlacklist(models.Model):
     email = models.CharField(max_length=255, primary_key=True)
     reject_text = models.CharField(max_length=192)
+
     class Meta:
         db_table = 'postfix_blacklist'
 
@@ -2224,12 +2258,14 @@ class PostfixMailseen(models.Model):
     update_time = models.DateTimeField()
     create_time = models.DateTimeField()
     release = models.CharField(max_length=18)
+
     class Meta:
         db_table = 'postfix_mailseen'
 
 
 class PostfixWhitelist(models.Model):
     email = models.CharField(max_length=255, primary_key=True)
+
     class Meta:
         db_table = 'postfix_whitelist'
 
@@ -2242,7 +2278,6 @@ class RegisterMarketing(models.Model):
     account = models.ForeignKey(Account, db_column='uid', related_name='received_marketings')
     sender = models.ForeignKey(Account, null=True, db_column='sender', blank=True, related_name='sent_marketings')
     email = models.CharField(max_length=765)
-    pkey = models.CompositeField(account, email, primary_key=True)
 
     date = models.DateField()
     last = models.DateField()
@@ -2252,14 +2287,17 @@ class RegisterMarketing(models.Model):
     message = models.CharField(max_length=48)
     message_data = models.CharField(max_length=192, blank=True)
     personal_notes = models.TextField(blank=True)
+
     class Meta:
         db_table = 'register_marketing'
+        unique_together = (('uid', 'email'),)
 
 
 class RegisterMstat(models.Model):
     account = models.OneToOneField(Account, primary_key=True, db_column='uid', related_name='received_marketings_stats')
     sender = models.ForeignKey(Account, null=True, db_column='sender', blank=True, related_name='sent_marketings_stats')
     success = models.DateField()
+
     class Meta:
         db_table = 'register_mstats'
 
@@ -2276,6 +2314,7 @@ class RegisterPending(models.Model):
     naissance = models.DateField()
     hash = models.CharField(max_length=36)
     services = models.CharField(max_length=78)
+
     class Meta:
         db_table = 'register_pending'
 
@@ -2289,6 +2328,7 @@ class RegisterPendingXnet(models.Model):
     hash = models.CharField(max_length=36)
     sender_name = models.CharField(max_length=765)
     group_name = models.CharField(max_length=765)
+
     class Meta:
         db_table = 'register_pending_xnet'
 
@@ -2298,9 +2338,10 @@ class RegisterSubs(models.Model):
     type = models.CharField(max_length=15)
     sub = models.CharField(max_length=96)
     domain = models.CharField(max_length=192)
-    pkey = models.CompositeField(account, type, sub, domain, primary_key=True)
+
     class Meta:
         db_table = 'register_subs'
+        unique_together = (('uid', 'type', 'sub', 'domain'),)
 
 
 # Search
@@ -2310,23 +2351,25 @@ class RegisterSubs(models.Model):
 class SearchAutocomplete(models.Model):
     name = models.CharField(max_length=60)
     query = models.CharField(max_length=300)
-    pkey = models.CompositeField(name, query, primary_key=True)
     result = models.TextField()
     generated = models.DateTimeField()
+
     class Meta:
         db_table = 'search_autocomplete'
+        unique_together = (('name', 'query'),)
 
 
 class SearchName(models.Model):
     profile = models.ForeignKey(Profile, db_column='pid')
     token = models.CharField(max_length=765)
-    pkey = models.CompositeField(profile, token, primary_key=True)
     score = models.IntegerField()
     soundex = models.CharField(max_length=12)
     flags = models.CharField(max_length=18)
     general_type = models.CharField(max_length=27)
+
     class Meta:
         db_table = 'search_name'
+        unique_together = (('pid', 'token'),)
 
 
 # Requests
@@ -2339,16 +2382,18 @@ class Request(models.Model):
     data = models.TextField()
     stamp = models.DateTimeField()
     profile = models.ForeignKey(Profile, null=True, db_column='pid', blank=True)
-    pkey = models.CompositeField(account, stamp, type, primary_key=True)
+
     class Meta:
         db_table = 'requests'
+        unique_together = (('uid', 'stamp', 'type'),)
 
 
 class RequestAnswer(models.Model):
-    #id = models.IntegerField(primary_key=True)
+    id = models.IntegerField(primary_key=True)
     category = models.CharField(max_length=45)
     title = models.CharField(max_length=150)
     answer = models.TextField()
+
     class Meta:
         db_table = 'requests_answers'
 
@@ -2356,6 +2401,7 @@ class RequestAnswer(models.Model):
 class RequestHidden(models.Model):
     account = models.ForeignKey(Account, primary_key=True, db_column='uid')
     hidden_requests = models.TextField()
+
     class Meta:
         db_table = 'requests_hidden'
 
@@ -2365,7 +2411,7 @@ class RequestHidden(models.Model):
 
 
 class AXLetter(models.Model):
-    #id = models.IntegerField(primary_key=True)
+    id = models.IntegerField(primary_key=True)
     short_name = models.CharField(max_length=48, unique=True, blank=True)
     subject = models.CharField(max_length=765)
     title = models.CharField(max_length=765)
@@ -2378,6 +2424,7 @@ class AXLetter(models.Model):
     echeance = models.DateTimeField()
     date = models.DateField()
     bits = models.CharField(max_length=48)
+
     class Meta:
         db_table = 'axletter'
 
@@ -2385,6 +2432,7 @@ class AXLetter(models.Model):
 class Carva(models.Model):
     account = models.ForeignKey(Account, primary_key=True, db_column='uid')
     url = models.CharField(max_length=765)
+
     class Meta:
         db_table = 'carvas'
 
@@ -2392,9 +2440,10 @@ class Carva(models.Model):
 class Contact(models.Model):
     account = models.ForeignKey(Account, db_column='uid')
     contact = models.ForeignKey(Profile, db_column='contact')
-    pkey = models.CompositeField(account, contact, primary_key=True)
+
     class Meta:
         db_table = 'contacts'
+        unique_together = (('uid', 'contact'),)
 
 
 class Downtime(models.Model):
@@ -2403,6 +2452,7 @@ class Downtime(models.Model):
     resume = models.CharField(max_length=765)
     description = models.TextField()
     services = models.CharField(max_length=54)
+
     class Meta:
         db_table = 'downtimes'
 
@@ -2411,19 +2461,21 @@ class EmailListModerate(models.Model):
     ml = models.CharField(max_length=192)
     domain = models.CharField(max_length=192)
     mid = models.IntegerField()
-    pkey = models.CompositeField(ml, domain, mid, primary_key=True)
     account = models.ForeignKey(Account, null=True, db_column='uid', blank=True)
     action = models.CharField(max_length=18)
     ts = models.DateTimeField()
     message = models.TextField(blank=True)
     handler = models.IntegerField(null=True, blank=True)
+
     class Meta:
         db_table = 'email_list_moderate'
+        unique_together = (('ml', 'domain', 'mid'),)
 
 
 class EmailSendSave(models.Model):
     account = models.OneToOneField(Account, primary_key=True, db_column='uid')
     data = models.TextField()
+
     class Meta:
         db_table = 'email_send_save'
 
@@ -2435,6 +2487,7 @@ class EmailWatch(models.Model):
     last = models.DateTimeField()
     account = models.ForeignKey(Account, null=True, db_column='uid', blank=True)
     description = models.TextField()
+
     class Meta:
         db_table = 'email_watch'
 
@@ -2442,23 +2495,26 @@ class EmailWatch(models.Model):
 class GeolocLanguage(models.Model):
     iso_3166_1_a2 = models.ForeignKey(GeolocCountry, db_column='iso_3166_1_a2')
     language = models.CharField(max_length=15)
-    pkey = models.CompositeField(iso_3166_1_a2, language, primary_key=True)
     country = models.CharField(max_length=765, blank=True)
     countryplain = models.CharField(max_length=765, db_column='countryPlain', blank=True) # Field name made lowercase.
+
     class Meta:
         db_table = 'geoloc_languages'
+        unique_together = (('iso_3166_1_a2', 'language'),)
 
 
 class HomonymList(models.Model):
     hrmid = models.CharField(max_length=765)
     account = models.ForeignKey(Account, db_column='uid')
-    pkey = models.CompositeField(hrmid, account, primary_key=True)
+
     class Meta:
         db_table = 'homonyms_list'
+        unique_together = (('hrmid', 'uid'),)
 
 
 class UrlShortener(models.Model):
     alias = models.CharField(max_length=255, primary_key=True)
     url = models.TextField()
+
     class Meta:
         db_table = 'url_shortener'