我在 Django 中的选择字段有问题。我需要有一个表格来将订单移动添加到工作订单中。
这些是choices.py中的选择
STATUS_CHOICES = (
(1, ("Orden Creada")),
(2, ("En Tienda Asociada")),
(3, ("Recibida en Cuyotek")),
(4, ("En Mesa de Trabajo")),
(5, ("Trabajo completado")),
(6, ("Sin Solución")),
(7, ("Lista para retirar en Cuyotek")),
(8, ("Lista para retirar en Tienda Asociada")),
(9, ("Es necesario contactar al cliente")),
(10, ("En espera de Repuestos")),
(20, ("ENTREGADA")),
)
如果用户不是员工,我需要将选择限制为仅显示“8 和 20”。
这是models.py中的模型
class OrderMovements(models.Model):
fk_workorder = models.ForeignKey(WorkOrder)
status = models.IntegerField(choices=STATUS_CHOICES, default=1)
timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
def __str__(self):
return str(self.fk_workorder)
这是forms.py中的表单
class AddMovementForm(forms.ModelForm):
class Meta:
model = OrderMovements
fields = ['status']
def clean_status(self):
status = self.cleaned_data.get('status')
return status
我找不到有关如何制作此过滤器的信息。
谢谢你的帮助!
最佳答案
您需要在表单类中定义一个 __init__()
方法,该方法将 is_staff
作为参数。 is_staff
可以是 bool 值。
def __init__(self, *args, **kwargs):
is_staff = kwargs.pop('is_staff')
super(AddMovementForm, self).__init__(*args, **kwargs)
if is_staff:
self.fields['status'].choices = STAFF_STATUS_CHOICES
else:
self.fields['status'].choices = STATUS_CHOICES
初始化表单时,您可以执行以下操作
AddMovementForm(is_staff=True) # or
AddMovementForm(is_staff=False)
关于python - Django - 限制表单中选择字段的选择,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32015509/