Как визуализировать поля формы динамически
У меня есть две группы пользователей. 1. писатель 2. редакторы
Если пользователь вошел как писатель, отобразите title
а также body
поле модели статьи, если пользователь вошел в систему как редактор, отобразить title
body
а также approved
поле, чтобы редактор мог утвердить статью, просмотрев ее.
Мне нужно реализовать эту функцию без использования администратора Django. как я мог достичь этого?
class Article(models.Model):
choices = (("review", "Review"))
title = models.CharField("Article title", max_length=200)
body = models.TextField()
writer = models.ForeignKey(User, on_delete=models.CASCADE)
status = models.CharField(
max_length=20,
choices=(
('reivew', 'review'),
('published', 'published')
)
)
def get_absolute_url(self):
reverse('article-detail', kwargs={
"pk": self.id
})
views.py
class ArticleCreate(CreateView):
model = Article
# Don't need to define inside meta class
fields = ("title", "body")
# Override the form_valid method to populate your data.
def form_valid(self, form):
form.instance.writer = self.request.user
form.instance.status = "published"
return super(ArticleCreate, self).form_valid(form)
# Don't need success url
# get_absolute_url is already defined in model
Q. Где написать логику, чтобы скрыть и отобразить status
поле в зависимости от типа группы пользователей
if u.groups.filter(name="Editors").exists():
#display status field
else:
# hide status field.
Я знаю, что могу сделать это с помощью администратора django, используя эту логику, но я хочу реализовать свои собственные общие представления и формы.
class ArticleAdmin(admin.ModelAdmin):
fields = ['title', 'body'] # here comes the fields open to all users
def change_view(self, request, object_id, extra_context=None): # override default admin change behaviour
if request.user in Editors: # an example
self.fields.append('status') # add field 2 to your `fields`