Django Custom Primary Key尝试插入Null

时间:2014-07-15 22:01:24

标签: django django-models django-templates django-admin

这个问题存在一些限制。我们目前使用具有实时虚拟机统计信息的生产数据库。我们正在尝试创建一个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>

1 个答案:

答案 0 :(得分:0)

我打算对你的问题发表评论,但我还没有声誉...... 但我可以建议您发布相关的admin.py代码吗?也许其中有一些与Null PK错误相关的内容。

关于第二部分,ManyToManyField听起来更合适。