2

次のコードがあります。

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]

問題は、インラインを編集するときに、(TelefoneIP の) cliente_atual の値を、保存するときに (MovimentoTelefoneIP の) cliente として設定できるかということです。

ありがとう。

PS: このコードを MovimentoTelefoneIP 内に入力しましたが、機能しませんでした。フィールド cliente_atual は更新されましたが、インライン データは保存されませんでした。Hassekのコードも試しましたが、何も試しませんでした..

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

2 に答える 2

0

私は自分の問題を解決する別の論理的な方法を見つけました。しかし、私はまだ疑問です:Djangoの関連クラスからデータにアクセスする

于 2012-07-27T19:08:05.697 に答える
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でデバッグしているオブジェクトを調べてください。

于 2012-07-25T14:38:32.913 に答える