我是新來的python和Django,所以這個問題可能很容易解決,但我不能得到它的工作。 基本上我有一個模型,其中包含用戶類型的兩個外鍵。我正在構建一個表單,我想根據另一個字段刪除ModelChoiceField的一個選項。我希望用戶無法在表單中選擇自己。我的代碼是 。ModelChoiceField中的分隔選項
Models.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
forms.py的views.py
3210所以我的想法是給用戶傳遞到形式,以便它可以
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))
提取物定義一個不包含它的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)
加入我到底使用的代碼,感謝lazerscience – eliocs 2010-07-04 17:49:09