Автозаполнение поля внешнего ключа на основе slug в URL-адресе

Я работаю над сайтом форума, где пользователь выбирает игру, о которой он хочет написать сообщение, и пишет сообщение. Проблема в том, что я не хочу, чтобы пользователь выбирал игру из выпадающего поля внешнего ключа. Я хочу, чтобы поле внешнего ключа заполнялось самостоятельно на основе slug, указанного в URL.

models.py posts app

class Post(models.Model):
    title = models.CharField(max_length=200, blank=True, null=True)
    user = models.ForeignKey(User, related_name="posts",on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now=True)
    message = models.TextField()
    # need this field automatically filled out
    game = models.ForeignKey(Game, related_name="posts",null=True, blank=True,on_delete=models.CASCADE)
    slug = models.SlugField(allow_unicode=True, unique=False, null=True, blank=True)

    def __str__(self):
        return self.title

    def save(self, *args, **kwargs):
        self.slug = slugify(self.title)
        super().save(*args, **kwargs)


    def get_absolute_url(self):
        return reverse(
            "posts:single",
            kwargs={
                "username": self.user.username,
                "pk": self.pk,
                "slug": self.game.slug,
            }
        )

models.py games app

class Game(models.Model):
    title = models.CharField(max_length=255)
    slug = models.SlugField(allow_unicode=True, unique=True)

    def __str__(self):
        return self.title

    def save(self, *args, **kwargs):
        self.slug = slugify(self.title)
        super().save(*args, **kwargs)
    
    def get_absolute_url(self):
        return reverse("games:single", kwargs={"slug": self.slug})
    

urls.py posts app

urlpatterns = [
    path('', views.PostList.as_view(), name="all"),
    # need this slug to match the game
    path("new/<slug>/", views.CreatePost.as_view(), name="create"),
]

views.py posts app

class CreatePost(LoginRequiredMixin, SelectRelatedMixin, generic.CreateView):
    fields = ('title','message','game')
    model = models.Post
    select_related = ('user', 'game')
        

Я предполагаю, что мне нужно захватить игровой объект с тем же slug, что и тот, который указан в url?

Я сделал следующее из параметра slug:game_slug получается slug, по которому я получаю запись из Game (id). По этому id получается запись из Post. Некоторые данные отображаются на странице. Обратите внимание, что при использовании get, требуемая запись должна быть одна.

views.py

def game(request, game_slug):
    pos = Game.objects.get(slug=game_slug).id
    aaa = Post.objects.get(game_id=pos)

    return HttpResponse(f"""
            <p>title: {aaa.title}</p>
            <p>user: {aaa.user}</p>
            <p>created_at: {aaa.created_at}</p>
        """)

urls.py

urlpatterns = [
    path('new/<slug:game_slug>/', game, name='game'),
]

Почтовые данные выглядят следующим образом: enter image description here В моем случае я перешел к:

http://localhost:8000/new/sport/

И получил следующие данные:

post3

user: Tom

created_at: 2022-10-04 14:48:49.576413+00:00
Вернуться на верх