Как автоматически установить тему комментария в ту же тему, что и сообщение

я хочу иметь возможность создавать комментарии, нажимая на ссылку комментария под сообщением, каждое сообщение имеет тему, но я не могу получить комментарии под конкретным сообщением, поэтому я подумал добавить тему также для большей функциональности, но я нахожу это трудным для автоматического назначения темы на основе того, какое сообщение я комментирую

my views.py pk устанавливается как post.id

def comment(request, pk):
     form = commentform()
     context = {
          'form' : form
     }
     if request.method == 'POST':
          form = commentform(request.POST)
          if form.is_valid():
               forms = form.save(commit=False)
               forms.posts = post.objects.get(id=pk)
               forms.owner = request.user
               forms.topics = topic.objects.get(id=pk)
               forms.save()
               return redirect('home')
     return render(request, 'base/comment.html', context)

my models.py

class comments(models.Model):
    topics = models.ForeignKey(topic, on_delete=models.CASCADE, SET_NULL=True, null=True)
    created = models.DateTimeField(auto_now=True)
    posts = models.ForeignKey(post, on_delete=models.CASCADE)
    owner = models.ForeignKey(User, on_delete=CASCADE)
    comment = models.TextField(max_length= 500)

    def __str__(self):
        return str(self.comment)


class post(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    Topic = models.ForeignKey(topic, on_delete=models.CASCADE)
    post = models.TextField(max_length=500)
    created = models.DateTimeField(auto_now=True)
    def __str__(self):
        return f'{self.post}'

my forms.py

class commentform(ModelForm):
    class Meta:
        model = comments
        fields = ['comment']

Если я правильно вас понял, вам нужно просто перемещаться по инстанциям.

Теперь, если комментарии к сообщению относятся к одной и той же теме, вам не следует указывать тему и в комментарии. Таким образом вы просто дублируете информацию, и это будет дополнительным усилием для синхронизации. Просто свяжите тему с постом, а затем пройдитесь по нему, чтобы получить его.

class comments(models.Model):
    created = models.DateTimeField(auto_now=True)
    posts = models.ForeignKey(post, on_delete=models.CASCADE)
    owner = models.ForeignKey(User, on_delete=CASCADE)
    comment = models.TextField(max_length= 500)


class post(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    topic = models.ForeignKey(Topic, on_delete=models.CASCADE)
    post = models.TextField(max_length=500)
    created = models.DateTimeField(auto_now=True)

Для доступа к теме просто перейдите по ссылке,

post = post.objects.get(pk)
post.topic
Вернуться на верх