這個問題有一些限制。我們目前使用生產數據庫和實時虛擬機統計數據。我們正在嘗試創建一個django界面,它與我們希望我們的管理員能夠編輯的表格進行交互。因此,遷移是不可能的,因爲除非我瞭解遷移錯誤,否則會影響當前的數據庫結構和/或數據。Django自定義主鍵嘗試插入空值
我恰好在我的models.py文件中匹配了數據庫結構。不過,我遇到了一些問題。我遇到的其中一個問題是當我嘗試在管理控制面板下添加一個新項目時,它會給我一個完整性錯誤,因爲它試圖爲我設置爲主鍵的字段插入一個空值models.py文件。
我們目前正在使用一個oracle數據庫。
我的Models.py不是全部,而是它的一個樣本。
class License(models.Model):
license_id = models.AutoField(primary_key = True, editable = False, db_column='license_id')
license_authority_id = models.ForeignKey(License_authoritie, on_delete = models.PROTECT, db_column='license_authority_id')
product = models.CharField(max_length = 20)
class Meta:
managed = False
db_table = 'licenses'
ordering = ['product']
def __unicode__(self): # Python 3: def __str__(self):
return self.product
class Vm_license(models.Model):
vm_license_id = models.AutoField(primary_key = True, db_column='vm_license_id')
vm_id = models.ForeignKey(Vm, on_delete = models.PROTECT, db_column='vm_id')
license = models.ManyToManyField(License)
class Meta:
managed = False
db_table = 'vm_licenses'
的錯誤,我得到:
Request Method: POST
Request URL: http://127.0.0.1:8000/admin/portal/vm_license/add/
Django Version: 1.6.5
Exception Type: IntegrityError
Exception Value:
ORA-01400: cannot insert NULL into ("DEV"."VM_LICENSES"."VM_LICENSE_ID")
最重要的是我遇到了另一個問題之上。
對於這兩個表,在管理面板中的vm_licenses部分下,該表是包含所有虛擬機及其分配的許可證的表。我需要能夠爲管理面板的添加部分下的每個vm_id一次選擇多個許可證,但我不太確定如何執行此操作。
admin.py代碼
class vm_license_admin(admin.ModelAdmin):
#list_display = ('vm_id', 'license_id')
list_display = ('vm_id',)
search_fields = ('vm_id__vm_name',)
ordering = ('vm_id',)
filter_horizontal = ('license',)
admin.site.register(Vm_license, vm_license_admin)
我還做了一個Oracle觸發器自動遞增,如果有沒有一個主鍵,但IM仍然得到同樣的錯誤。
CREATE OR REPLACE TRIGGER license_trigger
BEFORE INSERT ON vm_licenses
FOR EACH ROW
BEGIN
SELECT vm_license_seq.nextval
INTO :new.vm_license_id
FROM dual;
END;
更percise我使用的是多對多場並正確顯示當我轉到點擊保存和獲取零誤差前添加一個新的項目,但如果我轉到現有項目,它會說表或視圖不存在。
我使用manytomany領域,當我去添加一個新的項目之前單擊保存並獲得空錯誤它將正確顯示,但是當我去現有的項目時它說表或視圖不存在使用多太多。 – PythonDevOps
確定進行了更改 – PythonDevOps
您的admin.py代碼看起來很乾淨,所以我無法幫助您解決第一個問題,因爲它超出了我的頭。 你的第二個問題,我誤解你已經有一個ManyToManyField。這應該在管理頁面上創建一個'