Как перезаписать значение по умолчанию в Views
У меня есть несколько представлений, которые используют одну и ту же модель и шаблон из-за необходимости в уникальных урлах.
Для каждого вида необходимо установить свои уникальные значения по умолчанию для нескольких полей модели. Например, в представлении 1 поле модели под названием 'name' должно иметь значение по умолчанию 'Name for a View 1 item', аналогично 'Name for a View 2 item' в представлении 2 и т.д.
Как я могу указать / перезаписать значение по умолчанию для поля в представлении?
Например
Models.py
class articles(models.Model):
fk_collection = models.ForeignKey(collection, default='1' on_delete=models.CASCADE)
name = models.CharField(max_length=250)
def __str__(self):
return self.name
class Meta:
ordering = ('name', )
Views.py
from .models import (articles)
class collection1(LoginRequiredMixin, CreateView):
model = misc
fields = ['fk_collection', 'name']
template_name = 'books_collection1.html'
{would like default value of fk_collection to be '1', name to be 'new article for collection 1'}
class collection2(LoginRequiredMixin, CreateView):
model = misc
fields = ['fk_collection', 'name']
template_name = 'books_collection1.html'
{would like default value of fk_collection to be '2', name to be 'new article for collection 2'}
Вы можете переопределить form_valid()
для установки значения, например, через базовое представление create:
from .models import Article
class BaseArticleCreateView(LoginRequiredMixin, CreateView):
model = misc
fields = ['name']
fk_collection_value = None
def form_valid(self, form):
form.instance.fk_collection_id = self.fk_collection_value
return super.form_valid(form)
Тогда вы можете подкласс с двумя представлениями:
class Article1CreateView(BaseArticleCreateView):
fk_collection_value = 1
template_name = 'books_collection1.html'
class Article2CreateView(BaseArticleCreateView):
fk_collection_value = 2
template_name = 'books_collection2.html'