2017-04-06 52 views
0

帶PostgreSQL的Django 1.11。表「app_employee」的多個主鍵是不允許的。

我去遷移我的網站和models.py引發錯誤,我不能有多個主鍵。我看不到我在哪裏(或者我不瞭解如何)。

class Employee(models.Model): 
    Aegis_ID = models.UUIDField(primary_key=True, null=False, default=uuid.uuid4, editable=False, serialize=True) 
    Employee_Number = models.ForeignKey('self', on_delete=models.CASCADE, related_name='Company_Employee_Number', 
            null=True, blank=True, max_length=6, help_text="Employee ID") 
    Employee_FName = models.CharField(null=True, blank=True, max_length=25, help_text="First Name") 
    Employee_LName = models.CharField(null=True, blank=True, max_length=25, help_text="Last Name") 
    Employee_Email = models.EmailField(max_length=80, blank=True, help_text="GPM Email address") 
    Employee_Position = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, 
             related_name='Department_Employee_Position', max_length=3, 
             choices=EMPLOYEE_POSITION, help_text="Select position of this Employee.") 
    Hire_Date = models.DateField(null=True, blank=True, help_text="Enter the employee hire date.") 
    Employee_Division = models.CharField(max_length=2, null=True, blank=True, choices=DIVISION_CHOICES, 
            help_text="Assign the Audit Division for this employee.") 
    Employee_Region = models.CharField(max_length=3, null=True, blank=True, choices=REGION_CHOICES, 
            help_text="Assign the Audit Region for this employee.") 
    Employee_District = models.CharField(max_length=3, null=True, blank=True, choices=DISTRICT_CHOICES, 
            help_text="Assign the Audit District for this Employee.") 

閱讀這個確切主題Django的頁面,它的上市爲1.7解決的問題,不得不做Django是如何分類的類的表,按字母順序。

我也試過python manage.py flush隨後makemigrations之前migrate

那麼,哪些字段是Django的/的Postgres試圖進行「ID」和「主」,因爲我只是不理解,在這裏.. 。

根據關於自動主鍵Django文檔,還有看不見的是id = models.AutoField(primary_key=True)但我也明白,如果您分配primary_key=True到現場,這並不適用

回答

1

在你上面的模型表「app_employee」的多個主鍵不被允許。

不來因爲你有

Aegis_ID = models.UUIDField(primary_key=True, null=False, default=uuid.uuid4, editable=False, serialize=True) 

因爲Django文檔中它明確地確定

Django文檔

Field.primary_key 如果真,這個字段是主鍵模型。

如果您沒有爲模型中的任何字段指定primary_key = True,那麼Django會自動添加一個AutoField來保存主鍵,因此您不需要在任何字段上設置primary_key = True,除非您想要覆蓋默認的主鍵行爲。

primary_key = True意味着null = False且unique = True。一個對象只允許有一個主鍵。

我已經在我的項目上試過你的模型,它工作得很好。 爲了簡單起見,我刪除等領域

models.py

from __future__ import unicode_literals 
from django.db import models 
import uuid 

class Employee(models.Model): 
    Aegis_ID = models.UUIDField(primary_key=True, null=False,default=uuid.uuid4, editable=False, serialize=True) 
    Employee_Number = models.ForeignKey('self', on_delete=models.CASCADE, related_name='Company_Employee_Number', 
           null=True, blank=True, max_length=6, help_text="Employee ID") 
    Employee_FName = models.CharField(null=True, blank=True, max_length=25, help_text="First Name") 
    Employee_LName = models.CharField(null=True, blank=True, max_length=25, help_text="Last Name") 
    Employee_Email = models.EmailField(max_length=80, blank=True, help_text="GPM Email address") 

並且當我沒有

(venv) [email protected]:~/firstsite$ python manage.py makemigrations 
Migrations for 'employee': 
employee/migrations/0001_initial.py 
- Create model Employee 

然後

(venv) [email protected]:~/firstsite$ python manage.py migrate 
Operations to perform: 
Apply all migrations: admin, auth, contenttypes, employee, sessions 
Running migrations: 
Applying employee.0001_initial... OK 

所以它是正常工作

你需要做的是

要麼你重新創建你的應用程序或乾脆另起爐竈您的項目,可能會出現一些依賴問題什麼的。但是你的模型Employee的代碼沒問題。