Показать наиболее часто встречающиеся теги в 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