在Django中保存重复记录

在Django中保存重复记录,django,django-models,django-forms,Django,Django Models,Django Forms,我开始学习django,我遇到了一个新手问题: 我必须建模模型之间的关系是一对多的。一个提供程序必须有多个DetailLoad 我为DetailLoad创建了一个表单,我只需要保存id\u proveedor(FK)、anio和mes。 但是,当我尝试保存表单时,会显示一个验证错误“此提供程序的详细信息加载已存在” Models.py class Provider(models.Model): id_proveedor = models.AutoField(primary

我开始学习django,我遇到了一个新手问题: 我必须建模模型之间的关系是一对多的。一个提供程序必须有多个DetailLoad

我为DetailLoad创建了一个表单,我只需要保存id\u proveedor(FK)、anio和mes。 但是,当我尝试保存表单时,会显示一个验证错误“此提供程序的详细信息加载已存在”

Models.py

    class Provider(models.Model):
        id_proveedor = models.AutoField(primary_key=True, db_column='id_proveedor')
        nombre = models.CharField(max_length=50, blank=True)
        tipo = models.CharField(max_length=50, blank=True)
        asignado_a = models.CharField(max_length=15, blank=True, verbose_name='Asignado a')
        moneda = models.CharField(max_length=1, blank=True)
        class Meta:
            managed = False
            db_table = 'mpc_proveedores'

        def __unicode__(self):
            return self.nombre

class DetailLoad(models.Model):
    id_proveedor = models.ForeignKey(Proveedor,db_column='id_proveedor', primary_key=True, verbose_name='Proveedor')
    anio = models.IntegerField(blank=True, null=True)
    mes = models.IntegerField(blank=True, null=True)
    f_carga = models.DateField(blank=True, null=True, verbose_name='Fecha de carga')
    usuario = models.CharField(max_length=15, blank=True)
    registros = models.FloatField(blank=True, null=True,verbose_name='Cant. de Registros')
    num_codigos = models.IntegerField(blank=True, null=True,verbose_name='Cant. codigos')
    lista_codigos = models.CharField(max_length=2500, blank=True, verbose_name='Lista de Codigos')
    class Meta:
        managed = False
        db_table = 'mpc_detalle_carga_archivo'
我用于保存数据的表单定义:

class NewDetLoadForm(forms.ModelForm):
      def __init__(self,*args,**kwargs):
       super(NewDetRecForm,self).__init__(*args,**kwargs)
       self.helper = FormHelper(self)
       self.helper.layout.append(Submit('save','Grabar'))
       self.helper.layout = Layout(
        Fieldset('',
                 'id_proveedor',
                 'anio',
                 'mes',
                 Submit('save','Grabar'),
                )
       )


      class Meta:
        model = DetalleRecepcion
我的看法是:

def NewDetLoadView(request):
    if request.method == "POST":
       drform = NewDetLoadForm(request.POST or none)
       if drform.is_valid():
          drform.save()
          return HttpResponseRedirect('/monitor/')
    else:
       drform = NewDetLoadForm()

    return render_to_response('newdetload.html',locals(),
                               context_instance=RequestContext(request))
我需要能够保存记录,选择提供者并填充其他两个字段,即使是重复的行。 顺便说一下,这是一个遗留数据库,表与其他表之间没有约束或任何类型的关系


提前感谢

详细加载
模型中,您正在设置
Proveedor
外键,并将其作为主键。主键总是唯一的,这就是为什么不能添加其他条目的原因。您需要从以下位置删除
主键=True

id_proveedor = models.ForeignKey(Proveedor,db_column='id_proveedor', primary_key=True, verbose_name='Proveedor')

在django中,主键是自动生成的,您不需要在模型中定义它们。可以使用
id
pk
属性访问主键。

谢谢,我遵照您的建议,但现在我收到错误ORA-00904:“MPC\u DETAIL\u LOAD”。“id”:无效标识,您应该安装并使用south app(如果Django版本<1.7)或进行迁移(如果Django版本>=1.7),或者您应该使用一些oracle工具手动更改表。因为如果只删除模型中的
primary\u key=True
,数据库中的数据将不会更改。看看这个问题