2012-07-25 80 views
2

我有下面的代码后:编辑的Django模型保存它

models.py

class TelefoneIP(models.Model): 
     mac = models.CharField(max_length=12, help_text="Este campo deve ter 12 digitos") 
     modelo = models.ForeignKey(ModeloTelefoneIP) 
     cliente_atual = models.ForeignKey(Cliente) 
     fornecedor = models.ForeignKey(Fornecedor) 
     datacompra = models.DateField(verbose_name="Data de compra", null=True, blank=True) 
     nfcompra = models.IntegerField(verbose_name="Nota fiscal de compra") 

class MovimetoTelefoneIP(models.Model): 
     equipamento = models.ForeignKey(TelefoneIP) 
     cliente = models.ForeignKey(Cliente) 
     nfvenda = models.IntegerField(verbose_name="Nota fiscal de saída", null=True, blank=True) 
     datavenda = models.DateField(verbose_name="Data de saída", null=True, blank=True) 

admin.py:

class TelefoneIPInline(admin.StackedInline): 
     model = MovimetoTelefoneIP 
     extra = 1 
     list_filter = ['nome'] 

class TelefoneIPAdmin(admin.ModelAdmin): 
     list_display = ('mac', 'modelo', 'fornecedor',) 
     list_filter = ['cliente_atual__nome'] 
     search_fields = ['mac'] 
     inlines = [TelefoneIPInline] 

的问题是,当我编辑的内嵌,我可以在保存时将cliente_atual(在TelefoneIP上)的值设置为客户端(在MovimentoTelefoneIP上)?

谢谢。

PS:我在MovimentoTelefoneIP里输入了这段代码,但是没有工作。 更新了字段cliente_atual,但内联数据没有保存。 我也试过Hassek的代码并没有什么..

def save(self, *args, **kwargs): 
      MovimetoTelefoneIP.save() 
      equipamento = self.equipamento 
      equipamento.cliente_atual = self.cliente 
      equipamento.save() 

回答

0

是的,你必须覆盖从形式保存,并添加形式向管理员:

class TelefoneIpForm(forms.ModelForm): 
    class Meta: 
     model = TelefoneIp 

    def save(self, commit=True): 
     instance = super(TelefoneIpForm, self).save(commit=commit)   

     equipamento = instance.equipamento 
     equipamento.cliente = instance.cliente_atual 
     equipamento.save() 

class TelefoneIPAdmin(admin.ModelAdmin): 
    list_display = ('mac', 'modelo', 'fornecedor',) 
    list_filter = ['cliente_atual__nome'] 
    search_fields = ['mac'] 
    inlines = [TelefoneIPInline] 
    form = TelefoneIpForm 

我还没有测试的代码所以如果信息无法像代码中显示的那样访问,只需检查调试对象pdb

+0

它没有为我工作.. – 2012-07-25 16:32:07

+0

你尝试调试它吗?它抛出了什么异常? – Hassek 2012-07-25 16:40:32

+0

未绑定的方法save()必须使用MovimetoTelefoneIP实例作为第一个参数调用(取而代之)。 我还发布了一个上面的代码,工作50%。 – 2012-07-25 16:52:58