辉煌仪奇 2021-09-06 11:14 采纳率: 49.1%
浏览 49
已结题

Django 后台管理系统model数据刷新问题

现在有数据表如下,表中有字段是根据其他表来填写的,我做了一个choices来做下拉框,可是现在有问题就是用户新注册后,地址栏没有数据,重启django后地址栏才会有数据

# 用户表
class Userinfo(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=16, verbose_name='名字')
    code = models.CharField(max_length=16, verbose_name='工号', null=True, blank=True, unique=True)
    password = models.CharField(max_length=88, verbose_name='密码')
    isenable = models.BooleanField(default=False, verbose_name='是否启用')
    try:
        choices = [(i.ID, i.getaddressname) for i in addresschildren.objects.all()]
    except Exception as e:
        print(e)
        choices = []
    address_id = models.IntegerField(verbose_name='用户注册地', null=True, blank=True, choices=choices)
    try:
        choices = [(i.ID, i.Name) for i in address.objects.all()]
    except:
        choices = []
    super_address_id = models.IntegerField(verbose_name='用户管理范围', null=True, blank=True, choices=choices)
    config = configparser.ConfigParser()

    try:
        config.read(configsys.objects.get(name="config").value)
    except ObjectDoesNotExist:
        path = r'apps/config/config.ini'
        config.read(path)
    except Exception:
        path = r'apps/config/config.ini'
        config.read(path)
    choices = [(int(i[-1]), i[0]) for i in config.items('jurisdiction')]
    super_number = models.IntegerField(verbose_name='用户管理权限', null=True, blank=True, choices=choices, default=1)

新地址,新用户,地址栏无显示

img


下拉菜单也无法找到刚刚注册的地址

img

重启django后

img

img

请问该如何让django数据库中数据更新后能实时拿到数据并在这个方法中显示

  • 写回答

2条回答 默认 最新

  • 咕泡-三木 2021-09-06 15:38
    关注
    choices = [(i.ID, i.getaddressname) for i in addresschildren.objects.all()]
    

    这样的代码可以看出,问题非常大,我不知道你是在哪学习Django的,如果需要帮助的话可以加我,我从15年开始使用Django,而且为DRF框架贡献过代码。


    class内的代码定义了model,没错,但是这样的定义代码【只在Python运行的时候执行1次】

    比如第九行choices = [(i.ID, i.getaddressname) for i in addresschildren.objects.all()]
    Django刚启动时候choices有多少,后面就永远有多少,除非重新启动,【重新执行这一行】
    在没有重启的时候,通过网页添加了多少addresschildren,都不会【动态更新】
    这种数据表的关联关系,Django 有专门的用法,比如ForeignKey、ManyToManyRel

    class Address(models.Model):
        detail = models.CharField("详细地址", max_length=200, default="")
    
        def __str__(self):
            return self.detail
    
    
    # 用户表
    class Userinfo(models.Model):
        name = models.CharField("昵称", max_length=200)
        address = models.ForeignKey(Address, related_name="地址", on_delete=models.DO_NOTHING)  # 关联另一个model
    

    效果如下,关键是 【下拉选择框的内容,会根据数据库的情况,实时变化】

    img


    最后再多说一点
    为什么要用class定义model?
    因为class映射是数据表,object映射数据表中的数据,也就是说数据应该是一个个的object,而不是class

    model应该只定义数据的scheme,而无关具体的值

    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月15日
  • 已采纳回答 9月7日
  • 创建了问题 9月6日

悬赏问题

  • ¥15 Google Chrome 所有页面崩溃,三种解决方案都没有解决,我崩溃了
  • ¥18 如何用c++编写数学规律题
  • ¥20 使用uni-app发起网络请求,获取重定向302返回的cookie
  • ¥20 手机外部浏览器拉起微信小程序支付 (相关搜索:微信小程序)
  • ¥20 怎样通过一个网址找到其他同样模版的网址
  • ¥30 XIAO esp32c3 读取FDC2214的数据
  • ¥15 在工控机(Ubuntu系统)上外接USB蓝牙硬件进行蓝牙通信
  • ¥15 关于PROCEDURE和FUNCTION的问题
  • ¥100 webapi的部署(标签-服务器)
  • ¥20 怎么加快手机软件内部计时的时间(关键词-日期时间)