Xadmin的Model管理——如何实现wizard_form_list一步一步加载数据(独一份)

目录

一、wizard_form_list一般使用

1.model

2.adminx

3.参考链接

二、wizard_form_list与默认字段配合使用

(一)第一种,user字段在wizard_form_list中显示,可供选择

1.model

2.adminx

(二)第二种,user字段默认,不在wizard_form_list中显示

1.model

2.adminx

三、wizard_form_list与文件字段配合使用

1.model

2.adminx

3.参考链接:多图上传


一、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.参考链接

django-xadmin的使用(比官方文档更精简)_bocai_xiaodaidai的博客-CSDN博客_django-xadmin01-下载源码GitHub地址:https://github.com/sshwsfc/xadmin# 安装xadmin由于使用的是Django2.0的版本,所以需要安装xadmin项目django2分支的代码。 在PyCharm里打开命令行工具,输入以下命令完成安装:pip install git+git://github.com/sshwsfc/xadmin.git@dj...https://blog.csdn.net/bocai_xiaodaidai/article/details/94395604

二、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()

3.参考链接:多图上传

Django多图上传——通过重写imagefield实现(可后端,xadmin适用)_黎明总是如期而至-CSDN博客1.app目录2.各pywhttps://blog.csdn.net/qq_15028721/article/details/117962297

おすすめ

転載: blog.csdn.net/qq_15028721/article/details/121206125