shanshuise
V2EX  ›  Django

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

  •  
  •   shanshuise · Jan 16, 2013 · 4583 views
    This topic created in 4878 days ago, the information mentioned may be changed or developed.
    在跟着《The Django Book》学习Django的过程中,试着实现一个基本的功能,即用户通过一个表单提交三个数据(姓名、项目、项目状态),然后用户可以通过搜索来查看已提交内容。

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

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

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

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

    或者说只要有一个字段不一致就新建记录。然后查询时对a、b字段相同的可以只取更新时间较晚的一项记录?
    dimfox
        3
    dimfox  
       Jan 16, 2013
    @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
       Jan 17, 2013
    @dimfox It worked. Thanks.
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   960 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 20:24 · PVG 04:24 · LAX 13:24 · JFK 16:24
    ♥ Do have faith in what you're doing.