Skip to main content
 首页 » 编程设计

python之保存后编辑 Django 模型

2025年05月04日38Renyi-Fan

我有以下代码:

模型.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) 

管理员.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 上)的值设置为 cliente(在 MovimentoTelefoneIP 上)吗?

谢谢。

PS:我在 MovimentoTelefoneIP 中输入了这段代码,但也没有用.. 字段 cliente_atual 已更新,但未保存内联数据。 我也试过 Hassek 的代码,但什么也没有..

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

请您参考如下方法:

是的,您必须覆盖表单中的保存并将该表单添加到管理员:

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

调试它的对象