Можно ли добавить заполнитель в общей форме представления «Создать»? - PullRequest
0 голосов
/ 25 августа 2018

Это мой файл models.py

class Report_item(models.Model):
    owner = models.ForeignKey(settings.AUTH_USER_MODEL)
    title = models.CharField(max_length=255)
    item_type = models.CharField(default="", max_length=100)
    location = models.CharField(max_length=60)
    city = models.CharField(max_length=60)
    date = models.DateTimeField(default=timezone.now)
    Description = models.TextField(blank=True,null=True)
    publish = models.BooleanField(default=False)

    image = models.ImageField(default="add Item image")

    def __str__(self):
        return self.title + "      " + str(self.publish)

    def get_absolute_url(self):
        return reverse('feed:detail', kwargs={'pk': self.pk})

    class Meta:
        ordering = ["-date"]

Я добавляю общий вид Создать из модели в моем шаблоне.Файл views.py имеет следующий вид:

class ReportCreate(generic.CreateView):
    model = Report_item
    fields = ['title', 'item_type', 'location', 'city', 'image', 'Description']

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.owner = self.request.user
        self.object.save()
        return FormMixin.form_valid(self, form)

Я хочу добавить заполнитель в мою форму.Можно ли добавить заполнитель в общей форме представления «Создать»?Пожалуйста, добавьте один заполнитель для одного поля, а остальные я сделаю.

Ответы [ 2 ]

0 голосов
/ 15 мая 2019

Спасибо, @cyrlop, ваш ответ великолепен. Но я нашел это более подходящим, если кто-то не хочет менять тип виджета, который взят из самой модели

class ReportCreate(generic.CreateView):
    model = Report_item
    fields = ['title', 'item_type', 'location', 'city', 'image', 'Description']


    def get_form(self, form_class=None):
        if form_class is None:
            form_class = self.get_form_class()

        form = super(ReportCreate, self).get_form(form_class)
        form.fields['field_to_add_placeholder'].widget.attrs ={'placeholder': 'Your placeholder','class':'someclass'}
        return form
0 голосов
/ 25 августа 2018

Для общих видов вы можете сделать это:

class ReportCreate(generic.CreateView):
    model = Report_item
    fields = ['title', 'item_type', 'location', 'city', 'image', 'Description']


    def get_form(self, form_class=None):
        if form_class is None:
            form_class = self.get_form_class()

        form = super(ReportCreate, self).get_form(form_class)
        form.fields['field_to_add_placeholder'].widget = forms.TextInput(attrs={'placeholder': 'Your placeholder'})
        return form

    # rest of the class...

См. этот ответ и см. документы по виджетам .

Для ModelForm см. эту часть документа. Вы можете переопределить поля по умолчанию и в этом случае виджет, добавив атрибут заполнителя:

class AuthorForm(ModelForm):
    class Meta:
        model = Author
        fields = ('name', 'title', 'birth_date')
        widgets = {
            'name': Textarea(attrs={'placeholder': 'Enter your name here'}),
        }
...