Как перезаписать значение по умолчанию в 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'
Вернуться на верх