mar*_*gue 4 python forms django
我在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")),
)
Run Code Online (Sandbox Code Playgroud)
如果用户不是员工,我需要限制选项只显示"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)
Run Code Online (Sandbox Code Playgroud)
这是forms.py中的表单
class AddMovementForm(forms.ModelForm):
class Meta:
model = OrderMovements
fields = ['status']
def clean_status(self):
status = self.cleaned_data.get('status')
return status
Run Code Online (Sandbox Code Playgroud)
我找不到有关如何制作此过滤器的信息.
谢谢你的帮助!
anu*_*ham 10
您需要__init__()在表单类中定义一个方法,该方法is_staff作为参数.is_staff可以是布尔值.
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
Run Code Online (Sandbox Code Playgroud)
初始化表单时,您可以执行此操作
AddMovementForm(is_staff=True) # or
AddMovementForm(is_staff=False)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4277 次 |
| 最近记录: |