在我的 models.py 中,我有以下内容:
class Feed(models.Model):
rss_url = models.URLField()
updated = models.DateTimeField(blank=True, null=True)
def save(self, *args, **kwargs):
get_last_updated_date(self) # Get updated date
super(Feed, self).save(*args, **kwargs)
generate_content_from_feed(self) # Generating the content
class Content(models.Model):
title = models.CharField(max_length=500)
link = models.URLField()
feed = models.ForeignKey(Feed, related_name='content_feed')
在RSS 2.0规范中,通道(feed)的lastBuildDate不是必需的。这就是为什么我的更新字段可以为空并且为空。
您可能已经注意到,我的保存功能中有2个方法。
get_last_updated_date 方法使用Feed的网址查看是否存在lastBuildDate,如果存在,则在使用pytz校正时区后将其设置为我的更新字段。 / p>
generate_content_from_feed 方法使用Feed的网址从该频道获取项目并创建内容对象。我需要在super(Feed,self).save(* args,** kwargs)之后调用它,因为Content对象'必须将feed字段设置为调用该方法的字段。因此,在保存Feed本身之前无法完成此操作。
现在我的问题是,如果更新的日期与RSS源中的lastBuildDate匹配,那么我不想调用 generate_content_from_feed 方法,这样一来,事情会更有效率。但是,我实际上是在内容生成之前设置更新日期,因此如果lastBuildDate存在,它将始终与更新的字段匹配,并且不会生成任何内容。如果我在超级之后放置了更新日期函数,则必须再次调用save,从而导致无限循环。
我正在考虑做这样的事情:
if self.updated == None:
generate content
elif self.updated < [[lastBuildDate]]:
generate content
else:
dont generate content
我不知道如何实现这一点,因为我很难理解程序的流程。
所以有人可以帮我解决我的问题吗?我知道这很复杂,但希望我能够恰当地表达出来。
另外我不确定self.updated == None是否有效用于检查日期是否为空并且使用&lt;检查两个日期之间差异的运算符是否有效。如果有人告诉我,我会非常感激。
感谢。如果有人感兴趣,我也会使用feed解析器进行解析。