在ModelChoiceField中界定选择

2024-10-01 00:19:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python和django还不熟悉,所以这个问题可能很容易解决,但我不能让它发挥作用。 基本上我有一个模型,它包含两个用户类型的外键。我正在构建一个表单,在这个表单中,我想删除基于另一个字段的ModelChoiceField的一个选项。我希望用户不能在表单中选择自己。 我的密码。在

在模型.py在

from django.db import models
from django.contrib.auth.models import User

class Deuda(models.Model):
    ESTADOS = (("S", "Sin pagar"), ("P", "Pagada"), ("PC", "Pagada (Confirmada)"))

    propietario = models.ForeignKey(User, verbose_name="Propietario", related_name="propietario_deuda")
    adeudado = models.ForeignKey(User, verbose_name="Adeudado", related_name="adeudado_deuda")
    cantidad = models.FloatField("Cantidad")
    descripcion = models.TextField("Descripcion")
    estado = models.CharField(max_length=2, choices=ESTADOS)

    def __str__(self):
        return self.descripcion

在表单.py在

^{pr2}$

摘录视图.py在

[...]
form = DeudaForm(request.user)

所以我的想法是将用户传递给表单,以便它可以定义一个不包含它的ModelChoiceField。 我的代码不工作,因为设置'adedado'时d不在范围内。我确信有很多方法可以实现这个目标,请随意改变我的设计。在

最终代码:

from django import forms
from housemanager.iou.models import Deuda
from django.contrib.auth.models import User

class DeudaForm(forms.ModelForm):

    class Meta:
        model = Deuda
        exclude = ('propietario',)

    def __init__(self, propietario):
        d = Deuda()
        d.propietario = propietario
        forms.ModelForm.__init__(self, instance=d)
        self.fields['adeudado'].queryset = User.objects.exclude(pk=propietario.pk)

Tags: django用户namefrompyimportself表单
1条回答
网友
1楼 · 发布于 2024-10-01 00:19:45

尝试将其放入表单的__init__

class DeudaForm(forms.ModelForm):

    class Meta:
        model = Deuda
        exclude = ('propietario',)

    def __init__(self, propietario):
        forms.ModelForm.__init__(self)
        self.fields['adeudado'].queryset = User.objects.exclude(pk=d.propietario.pk)

相关问题 更多 >