Как сделать так, чтобы в выпадающем списке формы django отображались элементы, созданные только автором, а не всеми пользователями?

Я создал две модели тем и записей. Пользователь может создать тему, а также создать записи для каждой созданной им темы.

В классе создания темы в поле "тема" отображаются все темы, созданные всеми пользователями в выпадающем меню формы.

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

models.py:
    
    class Topic(models.Model):
        '''A topic that user will add the content about.'''
        title = models.CharField(max_length=200, unique=True)
        author = models.ForeignKey(User, on_delete=models.CASCADE)
    
    
    class Entries(models.Model):
        '''Entries and Topic will have many to one relationship'''
        topic = models.ForeignKey(Topic, on_delete=models.CASCADE)
        name = models.CharField(max_length=100)
        text = models.TextField()
        entries_image = models.ImageField(default= 'default.jpg', upload_to ='images')
        date_added = models.DateTimeField(auto_now_add=True)
        author = models.ForeignKey(User, on_delete=models.CASCADE)

views.py
    
    class CreateTopic(LoginRequiredMixin, CreateView):
        model = Topic
        fields = ['title']
    
    
        def form_valid(self, form):
            form.instance.author = self.request.user
            return super().form_valid(form)  
    
    
    class CreateTopicEntry(LoginRequiredMixin, CreateView):
        model = Entries
        fields = ['topic', 'name','text','entries_image']
    
    
        def form_valid(self, form):
            form.instance.author = self.request.user
            return super().form_valid(form)


Topic_form.html:
    
    <div>
        <form method="POST">
            {% csrf_token %}
                {% if object  %}
                    <h4 class="mb-4">Update your Topic &#128071</h4>
                    {{ form|crispy }}
                {% else %}
                    <h4 class="mb-4">Create your new Topic &#128071</h4>
                    {{ form|crispy }}
                {% endif %}
            <div class="form-group">
                <button class="btn btn-light" type="submit">Submit</button>
            </div>
        </form>
    </div>
    
entries_form.html:
    
        <div class="mt-5">
            <form method="POST" enctype="multipart/form-data">
                {% csrf_token %}
                    {% if object  %}
                        <h4 class="mb-4">Update your Entry &#128071</h4>
                            {{ form|crispy }}
                        {% else %}
                        <h4 class="mb-4">Create your new Entry &#128071</h4>
                            {{ form|crispy }}
                        {% endif %}
                    <div class="form-group">
                        <button class="btn btn-light" type="submit">Submit</button>
                    </div>
            </form>
        </div>

Вам просто нужно переопределить набор запросов формы в методе CreateTopicEntry's get_form, вот так:

class CreateTopicEntry(LoginRequiredMixin, CreateView):
    # Keep the code you already have 
    # ...

    def get_form(self, *args, **kwargs):
        form = super().get_form(*args, **kwargs)
        # Filter the queryset to include only topics by current user
        form.fields['topic'].queryset = Topic.objects.filter(author=self.request.user)
        return form
Вернуться на верх