gpt4 book ai didi

python - 界定 ModelChoiceField 中的选择

转载 作者:太空宇宙 更新时间:2023-11-03 19:36:49 25 4
gpt4 key购买 nike

我是 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

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)

adeudado = forms.ModelChoiceField(queryset=User.objects.exclude(pk=d.propietario.pk))

views.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)

最佳答案

尝试将其放入表单的__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)

关于python - 界定 ModelChoiceField 中的选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3175443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com