V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
oddcc
V2EX  ›  Python

Django 中类似功能的实现方法?

  •  
  •   oddcc · 2017-04-10 11:44:38 +08:00 · 2114 次点击
    这是一个创建于 2766 天前的主题,其中的信息可能已经有所发展或是发生改变。
    class Category(models.Model):
        c_name = models.CharField(max_length=100)
        
        
    class Item(models.Model):
        """外键关联到 Category"""
        i_name = models.CharField(max_length=100)
        category = models.ForeignKey('Category', related_name='items',
                                     null=True, blank=True)
    

    表结构是这样, 要实现在页面上新建一个分类的时候, 可以在同一个页面新建 /编辑这个分类包含的项目和项目具体信息

    目前想到的做法是, 页面上有添加项目的按钮, 点击按钮的时候就通过 Ajax 在数据库中生成了新项目, 然后在保存分类的时候, 再把刚才的项目和分类做关联; 但这样做的问题是, 如果编辑 /新建分类的时候刷新了页面, 或者其他原因没有最终点击保存的话, 数据库中会增加很多没有外键的 Item 数据

    请问实现这个功能更好的解决办法是什么? 或者说有什么办法, 判断在分类没有成功保存的情况下, 回滚之前建立的项目?

    7 条回复    2017-04-11 13:25:28 +08:00
    xiaket
        1
    xiaket  
       2017-04-10 12:12:37 +08:00
    不如定期清理?
    oddcc
        2
    oddcc  
    OP
       2017-04-10 12:24:11 +08:00
    @xiaket 目前我也是这么想的= ,= 但感觉是没有办法的办法, 想请教下看有没有更好的实现方式
    eggshell
        3
    eggshell  
       2017-04-10 12:49:09 +08:00   ❤️ 1
    为什么要点击的时候就新建一个 Item 呢?最终保存的时候再新建不行吗?
    vicalloy
        4
    vicalloy  
       2017-04-10 13:28:28 +08:00
    这个设计本身就有些问题。
    - Category.name 修改时是直接修改原来 category 的 name 还是创建一个新的 category
    - 如果 Category.name 是否直接用原有的 Category ,还是重复创建一个
    如果只需要 name 不一样就创建,你直接在 Item 里面判断就可以了。先根据 name 查询 category ,有直接关联,没有创建。在 item 编辑的时候不用区分到底是创建还是编辑。
    phithon
        5
    phithon  
       2017-04-10 19:32:40 +08:00
    三楼+1
    daveze
        6
    daveze  
       2017-04-11 12:56:07 +08:00
    为嘛不最后一步一起创建呢
    oddcc
        7
    oddcc  
    OP
       2017-04-11 13:25:28 +08:00
    @daveze
    @phithon
    @eggshell
    @vicalloy
    感谢回复
    是我简化问题的时候没描述清楚, 这个分类和项目中还有很多其他字段, 业务中有个叫项目模板的东西, 项目模板中预置了信息, 新建项目就是拷贝了一份项目模板然后做定制化的修改;
    如果是编辑分类的话, 确实在最后一起保存就可以了; 主要问题是出在新建分类的时候
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3611 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 04:25 · PVG 12:25 · LAX 20:25 · JFK 23:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.