django仅在满足某些条件时才将数据保存在数据库中

时间:2011-09-23 19:47:23

标签: python django django-models django-views

我有一个python函数可以从几个不同的网站上删除一些数据,我只想在满足某个条件的情况下将这些数据保存到我的数据库中。也就是说,只有在位置和日期字段的组合是唯一的

时才应保存已删除的数据

所以在我看来,我有一个新的位置变量和日期变量,基本上我只需要根据数据库中已有的值来测试这些值的组合。如果此组合是唯一的,则保存。如果不是,那就什么都不做。

class Speech(models.Model):
    location = models.ForeignKey(Location)
    speaker = models.CharField(max_lenth=100)
    date = models.DateField

我对django很新,所以我只是不确定如何执行这种数据库查询。

1 个答案:

答案 0 :(得分:1)

你想要两件事的结合。首先,您希望内部Meta类强制执行数据库中的唯一性:

class Speech(models.Model):
    location = models.ForeignKey(Location)
    speaker = models.CharField(max_length=100)
    date = models.DateField()

    class Meta:
        unique_together = ('location', 'date')

然后,当您在视图中进行数据操作时,您需要默认模型管理器的get_or_create方法:

speech, new = Speech.objects.get_or_create(
    location=my_location_string,
    date=my_datetime_variable,
)

if new:
    speech.speaker = my_speaker_string
    speech.save()

我希望能让你开始。一如既往,您比我更了解您的需求,所以不要盲目复制这个例子,而是根据您的需要进行调整。

文档: