Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带有变量“的Django表单”;“必需”;领域_Python_Django_Django Forms_Multi Tenant - Fatal编程技术网

Python 带有变量“的Django表单”;“必需”;领域

Python 带有变量“的Django表单”;“必需”;领域,python,django,django-forms,multi-tenant,Python,Django,Django Forms,Multi Tenant,我有一个多租户应用程序,其中每个“租户”(公司模型对象)都有多个客户端。 每个租户可以设置其应用程序所需的必填字段 class Client(models.Model): """ Client information """ company = models.ForeignKey(Company, blank=True, null=True, default=1, on_delete=models.SET_NULL) name = models.CharF

我有一个多租户应用程序,其中每个“租户”(公司模型对象)都有多个客户端。 每个租户可以设置其应用程序所需的必填字段

class Client(models.Model):
    """
    Client information
    """
    company = models.ForeignKey(Company, blank=True, null=True, default=1, on_delete=models.SET_NULL)
    name = models.CharField(max_length=150, blank=True)
    email = models.EmailField(max_length=255, unique=True)
    phone_number = models.CharField(max_length=50, blank=True, null=True)

class RequiredClientFields(models.Model):
    """
    Let each business decide how to enforce the data filling requirements for its staff/clients.
    0 - dont even show it
    1 - show it, but dont require (default)
    2 - require field for either staff or client
    3 - require for clients when self-filling their form, but not the staff members
    """
    company = models.ForeignKey(Company, db_index=True, on_delete=models.CASCADE)
    field_name = models.CharField(max_length=50)
    status = models.PositiveSmallIntegerField(choices=FIELD_STATUS_CHOICES, default=1)
那么,当创建要在模板上使用的django表单时,根据公司的策略显示(和验证)每个字段的最佳方式是什么


谢谢

像这样的东西可能有用

声明一个ModelForm并用逻辑覆盖
\uuuu init\uuuu()
,以删除字段或更改其
所需的状态:

类ClientForm(forms.ModelForm):
类元:
模型=客户端
字段='\uuuu所有\uuuu'
定义初始化(自我、公司、用户、*args、**kwargs):
super(ClientForm,self)。\uuuuu init\uuuuu(*args,**kwargs)
#对于每个RequiredClientFields实例,
#获取匹配的表单字段并进行更改
对于RequiredClientFields.objects.filter(公司=公司)中的规则:
#获取表单字段
field=self.fields.get(rule.field\u name,无)
如果字段:
如果rule.status==0:
#从表单中删除字段
self.fields.pop(rule.field\u name)
elif rule.status==2:
#需要字段
field.required=True
elif rule.status==3,而非user.is\U人员:
#在客户自行填写表格时要求,
#但不是工作人员
field.required=True
然后在视图中创建ModelForm的实例,为公司和用户传递参数

company=company.objects.get(pk=1)
客户表格=客户表格(公司=公司,用户=请求。用户)

请注意,当以这种方式控制表单字段时,可能存在安全隐患。查看Django ModelForm文档中的。

您可能需要对
ModelForm
进行子类化,并覆盖
\uuuu init\uuu()中的整个逻辑堆。你试过什么了?我正在写表单,但在表单中的字段与数据库中的字段相匹配的部分被卡住了。下面的代码是@MattRowbum编写的!