Показать наиболее часто встречающиеся теги в Django CreateView

Я пытаюсь показать наиболее часто встречающиеся теги для выбора при добавлении сообщения. Однако, когда я добавил get_context_data, форма исчезла.

class AddPostView(CreateView):
    model = Post
    form_class = AddPostForm
    template_name = 'add_post.html'

    def get_context_data(self, **kwargs):
        common_tags = Post.tags.most_common()[:4]
        context = {
            'common_tags': common_tags
        }
        return context

    # gets the user id
    def form_valid(self, form):
        form.instance.author = self.request.user
        return super().form_valid(form)

А это моя форма

class AddPostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ('title','summary', 'body', 'header_image', 'category', 'tags')

        labels = {
        "title": "العنوان",
        "tags": "العلامات",
        "category": "التصنيف",
        "summary":"الملخص",
        "body": "المحتوى",
        "header_image": "الغلاف",
        }

        widgets = {
            'title': forms.TextInput(attrs={'class':'form-control'}),
            'tags': forms.TextInput(attrs={'class':'form-control'}),
            'category': forms.Select(choices=choices_list, attrs={'class':'form-control'}),
            'summary': forms.TextInput(attrs={'class':'form-control'}),
            'header_image': forms.FileInput(attrs={'class':'form-control'}),
            'body': forms.Textarea(attrs={'class':'form-control'}), 
        }

попробуйте это

class AddPostView(CreateView):
    model = Post
    form_class = AddPostForm
    template_name = 'add_post.html'

    def get_context_data(self, **kwargs):
        ctx = super(AddPostView, self).get_context_data(**kwargs) # add this 
        common_tags = Post.tags.most_common()[:4]
        context = {
            'common_tags': common_tags
        }
        return context

Пожалуйста, обратитесь за более подробной информацией

https://docs.djangoproject.com/en/3.2/topics/class-based-views/generic-editing/

Вы также можете переопределить get_form вместо этого, чтобы заполнить поле tags формы своим собственным набором запросов следующим образом:

class AddPostView(CreateView):
    ...
    def get_form(self, *args, **kwargs):
        form = super().get_form(*args, **kwargs)
        form.fields['tags'].queryset = Post.tags.most_common()[:4]
        return form
Вернуться на верх