如何在数据库中找到现有对象?

时间:2014-02-16 14:48:30

标签: django

我有一个表单,它接受来自用户的数据并使用ajax发布。此表单用于安排日历活动。

当用户添加事件时,我想查看是否存在具有相同详细信息的事件。

事件模型有一个与之关联的日历:像这样

class EventModel(models.Model):
    calendar = models.ForeignKey(CalenderModel, blank=True, null=True, related_name="plans")
    event_details = models.IntegerField()   

以下是我在视图中创建事件时的样子:

event = EventModel(calendar=calendar, event_details =request.Post['event_details'])
event.save()

当用户尝试修改现有事件或尝试再次添加事件时,我希望能够找到他/她正在谈论的事件。

如果不具体,我该怎么做?我喜欢像

这样的东西
event = EventModel.objects.get(calendar=calendar).filter(event_details = event_details)

这应该返回具有相同细节的一个事件

但它找不到......

有没有更好的方法来实现这一目标?

2 个答案:

答案 0 :(得分:0)

试试这样:

event, created = EventModel.objects.get_or_create(calendar=calendar, event_details = event_details)

并且created是一个布尔值,表示事件是否是现在创建的,即。类似的还没有在DB中,或者它刚刚检索到现有的on.e

答案 1 :(得分:0)

在调用filter方法之后,您无法调用get方法,因为get方法返回一个模型或异常实例,而不是queryset。试试这个:

try:
    event = EventModel.objects.get(calendar=calendar, event_details=event_details)
except EventModel.DoesNotExist:
    # create here if need
except EventModel.MultipleObjectsReturned:
    # do something if you have two or more values with this data