目录
(一)第一种,user字段在wizard_form_list中显示,可供选择
(二)第二种,user字段默认,不在wizard_form_list中显示
一、wizard_form_list一般使用
1.model
class Loopwater(models.Model):
onequestion = models.CharField(max_length=5,verbose_name='1巡查结果',choices={('yes',"无问题"),('no',"有问题"),},default='yes')
onequestion_describe = models.CharField(max_length=30,verbose_name='1存在问题描述',blank=True,default='无')
onequestion_step = models.CharField(max_length=30,verbose_name='1采取的措施',blank=True,)
twoquestion = models.CharField(max_length=20,verbose_name='2巡查结果',choices={('yes',"无问题"),('no',"有问题"),},default='yes')
twoquestion_describe = models.CharField(max_length=30,verbose_name='2存在问题描述',blank=True,default='无')
twoquestion_step = models.CharField(max_length=30,verbose_name='2采取的措施',blank=True,)
2.adminx
class Loopwateradmin(object):
wizard_form_list = [
("问题1", ("onequestion", "onequestion_describe",)),
("问题2", ("twoquestion", "twoquestion_describe",)),
]
3.参考链接
二、wizard_form_list与默认字段配合使用
这里用user外键字段举例,这个字段这里需要默认,及当前登录账号。这里共有2种方式。
(一)第一种,user字段在wizard_form_list中显示,可供选择
1.model
class Loopwater(models.Model):
user = models.ForeignKey(UserProfile,verbose_name='上报人',on_delete=models.CASCADE,blank=True,default=1,)
pointposition = models.ForeignKey(Position,verbose_name='巡查点位',on_delete=models.CASCADE,)
onequestion = models.CharField(max_length=5,verbose_name='1巡查结果',choices={('yes',"无问题"),('no',"有问题"),},default='yes')
onequestion_describe = models.CharField(max_length=30,verbose_name='1存在问题描述',blank=True,default='无')
onequestion_step = models.CharField(max_length=30,verbose_name='1采取的措施',blank=True,)
twoquestion = models.CharField(max_length=20,verbose_name='2巡查结果',choices={('yes',"无问题"),('no',"有问题"),},default='yes')
twoquestion_describe = models.CharField(max_length=30,verbose_name='2存在问题描述',blank=True,default='无')
twoquestion_step = models.CharField(max_length=30,verbose_name='2采取的措施',blank=True,)
2.adminx
class Loopwateradmin(object):
wizard_form_list = [
("问题1", ("onequestion", "onequestion_describe",)),
("问题2", ("twoquestion", "twoquestion_describe",)),
("基本信息", ("pointposition", "user",)),
]
def save_models(self):
try:
if self.from_obj.cleaned_data['user']:
self.from_obj.cleaned_data['user'] = self.request.user
except Exception as e:
print(e)
super().save_models()
(二)第二种,user字段默认,不在wizard_form_list中显示
1.model
class Loopwater(models.Model):
user = models.ForeignKey(UserProfile,verbose_name='上报人',on_delete=models.CASCADE,blank=True,default=1,)
pointposition = models.ForeignKey(Position,verbose_name='巡查点位',on_delete=models.CASCADE,)
onequestion = models.CharField(max_length=5,verbose_name='1巡查结果',choices={('yes',"无问题"),('no',"有问题"),},default='yes')
onequestion_describe = models.CharField(max_length=30,verbose_name='1存在问题描述',blank=True,default='无')
onequestion_step = models.CharField(max_length=30,verbose_name='1采取的措施',blank=True,)
twoquestion = models.CharField(max_length=20,verbose_name='2巡查结果',choices={('yes',"无问题"),('no',"有问题"),},default='yes')
twoquestion_describe = models.CharField(max_length=30,verbose_name='2存在问题描述',blank=True,default='无')
twoquestion_step = models.CharField(max_length=30,verbose_name='2采取的措施',blank=True,)
2.adminx
class Loopwateradmin(object):
exclude = ['user',] # 记得元祖需要在后面加个逗号,不然会报错
wizard_form_list = [
("问题1", ("onequestion", "onequestion_describe",)),
("问题2", ("twoquestion", "twoquestion_describe",)),
("基本信息", ("pointposition", "user",)),
]
def save_models(self):
try:
if self.new_obj:
obj.user = self.request.user
obj.save()
except Exception as e:
print(e)
super().save_models()
三、wizard_form_list与文件字段配合使用
增加图片字段,我这里用了我自定义的字段,多图上传字段。需特别注意:fs和self.request.FILES.getlist('step_3-imgs')
1.model
class Loopwater(models.Model):
user = models.ForeignKey(UserProfile,verbose_name='上报人',on_delete=models.CASCADE,blank=True,default=1,)
pointposition = models.ForeignKey(Position,verbose_name='巡查点位',on_delete=models.CASCADE,)
imgs = UploaderImageField(max_length=500,verbose_name='多图上传',null=True, blank=True,upload_to='img')
onequestion = models.CharField(max_length=5,verbose_name='1巡查结果',choices={('yes',"无问题"),('no',"有问题"),},default='yes')
onequestion_describe = models.CharField(max_length=30,verbose_name='1存在问题描述',blank=True,default='无')
onequestion_step = models.CharField(max_length=30,verbose_name='1采取的措施',blank=True,)
twoquestion = models.CharField(max_length=20,verbose_name='2巡查结果',choices={('yes',"无问题"),('no',"有问题"),},default='yes')
twoquestion_describe = models.CharField(max_length=30,verbose_name='2存在问题描述',blank=True,default='无')
twoquestion_step = models.CharField(max_length=30,verbose_name='2采取的措施',blank=True,)
2.adminx
from django.core.files.storage import FileSystemStorage
fs = FileSystemStorage(location='/media/img')
class Loopwateradmin(object):
# 添加数据时候,一步一步提供数据
file_storage = fs
wizard_form_list = [
("问题1", ("onequestion", "onequestion_describe",)),
("问题2", ("twoquestion", "twoquestion_describe",)),
("基本信息", ("pointposition",'imgs')),
]
def save_models(self):
try:
if self.new_obj:
obj = self.new_obj
files = self.request.FILES.getlist('step_3-imgs')
fileimg = self.request.FILES.getlist('imgs')
print(files)
if files:
img_url = []
for f in files:
img_obj = Img()
img_obj.model = obj
img_obj.image = f
img_obj.save()
img_url.append(img_obj.image.name)
else:
img_url = Loopwater.objects.get(pk=obj.pk).imgs
if img_url:
img_url = img_url
else:
img_url = []
print(img_url)
for f in fileimg:
img_obj = Img()
img_obj.model = obj
img_obj.image = f
img_obj.save()
img = eval(img.name)
img_url.append(img_obj.image.name)
str_json = json.dumps(img_url, ensure_ascii=False)
obj.imgs = str_json
obj.segment = obj.pointposition.segment
obj.user = self.request.user
obj.save()
except Exception as e:
print(e)
super().save_models()