Как пропустить RSS-каналы, в которых отсутствуют определенные атрибуты
У меня есть список RSS-каналов, которые я хочу разобрать в своем Django-приложении. Некоторые из них содержат все нужные мне атрибуты, другие не содержат некоторых атрибутов. Те, в которых отсутствуют нужные мне атрибуты, продолжают аварийно завершать мою программу. Я продолжаю получать такие ошибки
raise AttributeError("object has no attribute '%s'" % key)
AttributeError: object has no attribute 'summary'
Моя модель
class Posts(models.Model):
title = models.CharField(max_length=500, verbose_name='Post Title', null=False)
link = models.URLField(max_length=500, verbose_name='Post Link', null=False)
summary = models.TextField(verbose_name='Post Summary', null=False)
image_url = models.URLField(max_length=500, null=False, verbose_name='Post Image URL', default='')
slug = models.SlugField(unique=True, max_length=500, null=False)
tags = TaggableManager()
pub_date = models.DateTimeField(verbose_name='Date Published', null=False)
guid = models.CharField(max_length=500, verbose_name='Guid Code', null=True)
feed_title = models.CharField(max_length=500, verbose_name='Feed Channel Title', null=False)
feed_description = models.TextField(verbose_name='Feed Channel Description', null=False)
date_created = models.DateField(auto_now_add=True, verbose_name='Date Created', null=False)
last_modified = models.DateField(auto_now=True, verbose_name='Last Modified', null=False)
source = models.ForeignKey(Source, on_delete=models.CASCADE, verbose_name='Source', null=False)
category = models.ForeignKey(Categories, on_delete=models.CASCADE, verbose_name='Category', null=False)
def __str__(self):
return f"{self.title} - {self.feed_title}"
class Meta:
verbose_name_plural = 'Posts'
Моя функция сохранения RSS
if not Posts.objects.filter(slug=post_slug).exists():
try:
post = Posts.objects.get(slug=post_slug)
except Posts.DoesNotExist:
post = Posts(
title = post_title,
link = post_link,
summary = post_summary,
image_url = image_link,
slug = post_slug,
pub_date = date_published,
guid = item.guid,
feed_title = channel_feed_title,
feed_description = channel_feed_desc,
source_id = selected_source_id,
category_id = selected_category_id
)
post.save()
for i in range(len(article_list)):
post_tags = post.tags.add(article_list[i])
Помощь в этом вопросе была бы очень признательна.
Один из способов - проверить, пуст ли атрибут, затем дать ему пустой/дефолтный объект, который требует ваше поле модели:
title = post_title if post_title else '',
....
pub_date = date_published if date_published else datetime.now(),
....