V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shanshuise
V2EX  ›  Django

求教一个Django中数据库的使用问题

  •  
  •   shanshuise · 2013-01-16 10:23:58 +08:00 · 3780 次点击
    这是一个创建于 4365 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在跟着《The Django Book》学习Django的过程中,试着实现一个基本的功能,即用户通过一个表单提交三个数据(姓名、项目、项目状态),然后用户可以通过搜索来查看已提交内容。

    数据库一个表中三个字段a、b、c,结果每次录入新数据时都会产生新的记录。使用的是progress.objects.create来把用户输入的值赋给表中的三个字段。

    如何才能使输入数据后若a和b都与数据库中已存在的记录一致则不产生新纪录,而只是更新c的值,否则就产生新的一条记录?

    是应该在progress.objects.create之前对录入的数据与数据库中的数据进行对比然后编写不同的语句,还是说有更好的办法?

    数据库基础几乎是零,如果上述表述各位大大看不懂,请谅解。。
    4 条回复    1970-01-01 08:00:00 +08:00
    dimfox
        1
    dimfox  
       2013-01-16 10:43:20 +08:00 via Android   ❤️ 1
    get_or_create
    shanshuise
        2
    shanshuise  
    OP
       2013-01-16 16:15:05 +08:00
    @dimfox 多谢,现在输入重复的数据不再产生新的记录了。只是我希望如果前两个字段与已有的某一项记录一致,而第三个字段不一致,则可以将数据库中那条相应记录的第三个字段的值更新,不知该如何实现?

    或者说只要有一个字段不一致就新建记录。然后查询时对a、b字段相同的可以只取更新时间较晚的一项记录?
    dimfox
        3
    dimfox  
       2013-01-16 23:12:00 +08:00
    @shanshuise
    1st case, 这个假定(a,b)unique
    obj = progress.objects.get_or_create(a=value_of_a, b=value_of_b)
    obj.c = value_of_c
    obj.save()

    2nd case, 假定(a,b,c)unique:
    obj = progress.objects.get_or_create(a=value_of_a, b=value_of_b, c=value_of_c)

    不用get_or_create其实也是可以得,无非是先判断一下有没有相关的记录,没有就先创建一个。
    shanshuise
        4
    shanshuise  
    OP
       2013-01-17 00:12:56 +08:00
    @dimfox It worked. Thanks.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2809 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:44 · PVG 20:44 · LAX 04:44 · JFK 07:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.