Как создать теги статьи из разделения заголовка в Django

Я хочу создавать теги статей из заголовка поста RSS-ленты. Затем сохранять эти теги в БД с post_id заголовка, из которого я получил теги. Что-то вроде этого:

Title = "Voyant raises $15M to scale production of its tiny, inexpensive lidar tech"
Tags = ['Voyant', 'Raises', '$15M', 'To', 'Scale', 'Production', 'Of', 'Its', 'Tiny', 'Inexpensive', 'Lidar', 'Tech']

Предполагая, что post_id равен 1, таблица Tags должна выглядеть следующим образом:

id    |    tag     |   post_id
--------------------------------
 1    |  Voyant    |      1
 2    |  Raises    |      1

У меня есть 3 модели в моей таблице (Source, Posts & Tags).

class Source(models.Model):
    name = models.CharField(max_length=500, verbose_name='Website Name')

class Posts(models.Model):
    post_title = models.CharField(max_length=500, verbose_name='Post Title')
    source = models.ForeignKey(Source, on_delete=models.CASCADE, verbose_name='Source')

class Tags(models.Model):
    name = models.CharField(max_length=500)
    post = models.ForeignKey(Posts, on_delete=models.CASCADE, verbose_name='Posts')

Пока что я смог разделить заголовок выше.

title = item.title
strip_away = title.replace(",", "").replace(":", "").replace("(", "").replace(")", "").replace("'", "").replace("[", "").replace("]", "").replace("!", "").replace("?", "").replace("-", " ")
capital = strip_away.title()
article_tags = capital.split()

Но теперь моя проблема возникает во время сохранения.

def fetch_articles():
    feed = feedparser.parse("my_site_of_preference")
    source = Source.objects.get(pk=1)
    source_id = int(source.pk)
    source_name = source
    save_new_articles(source_id, source_name, feed)

def save_new_articles(source_id, source_name, feed):
   selected_source_id = source_id

   for item in feed.entries: 
      title = item.title

      """ The splitting code """

      if not Posts.objects.filter(post_title=title).exists():
         post = Posts(post_title = title, source_id = selected_source_id)
         post.save()

      for i in range(len(article_tags)):
          tags = Tags.objects.create(name = article_tags[i], post_id = source_name.pk)
          tags.save()

Я продолжаю получать ошибку:

django.db.utils.IntegrityError: insert or update on table "Posts_tags" violates foreign key constraint "Posts_tags_post_id_3e6ae939_fk_Posts_posts_id"
DETAIL:  Key (post_id)=(1) is not present in table "Posts_posts".

Пост не был сохранен, чтобы создать post_id, который можно использовать в качестве PK при сохранении тегов. Как я могу сделать это, чтобы сохранить теги после сохранения заголовка поста?

При сохранении тегов следует ссылаться на пост с объектом, а не на его пк. Django ORM сделает это за вас. А при использовании create вам не нужно сохранять его снова, так как create() уже сохраняет его. Попробуйте сделать следующее в вашем цикле:

Tags.objects.create(name=article_tags[i], post=post)
Вернуться на верх