这个问题存在一些限制。我们目前使用具有实时虚拟机统计信息的生产数据库。我们正在尝试创建一个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")
最重要的是,我遇到了另一个问题。
对于这两个表,在admin面板的vm_licenses部分下,该部分是一个包含所有VM及其分配的许可证的表。我需要能够在管理面板的“添加”部分下为每个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触发器来自动递增主键,但我仍然得到同样的错误。
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字段,当我在单击save并获取null错误之前添加新项目时它会正确显示,但是如果我转到现有项目,它会说表或视图不存在。< / p>
答案 0 :(得分:0)
我打算对你的问题发表评论,但我还没有声誉...... 但我可以建议您发布相关的admin.py代码吗?也许其中有一些与Null PK错误相关的内容。
关于第二部分,ManyToManyField听起来更合适。