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

2013-01-16 10:23:58 +08:00
 shanshuise
在跟着《The Django Book》学习Django的过程中,试着实现一个基本的功能,即用户通过一个表单提交三个数据(姓名、项目、项目状态),然后用户可以通过搜索来查看已提交内容。

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

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

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

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

或者说只要有一个字段不一致就新建记录。然后查询时对a、b字段相同的可以只取更新时间较晚的一项记录?
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
2013-01-17 00:12:56 +08:00
@dimfox It worked. Thanks.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/57739

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX