Как обозначить поля на форме Django?

Я пытаюсь понять, как обозначить поля моей формы Django - на данный момент я не могу их изменить. Я пытался изменить имена полей и добавить метки в models.py, но он выдает ошибку, я не уверен, куда их добавить.

models.py:

from django.db import models
from django.contrib.auth.models import User


class Stats(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    date = models.DateField(auto_now=True)
    weight = models.DecimalField(max_digits=5, decimal_places=2)
    run_distance = models.IntegerField(default=5)
    run_time = models.TimeField()

    class Meta:
        db_table = 'health_stats'
        ordering = ['-date']

    def __str__(self):
        return f"You currently weigh {self.weight}, {self.user}"

views.py:

class UpdateHealth(View):
    
    def get(self, request, *args, **kwargs):

        stats = Stats
        update_form = StatUpdateForm
             
        context = {
            'stats': stats,
            "update_form": update_form,
            'user': stats.user,
            'weight': stats.weight,
            'date': stats.date,
        }
        return render(request, 'health_hub_update.html', context)
    
    def post(self, request, *args, **kwargs):

        stats = Stats
        update_form = StatUpdateForm(data=request.POST)
             
        context = {
            'stats': stats,
            "update_form": update_form,
            'user': stats.user,
            'weight': stats.weight,
            'date': stats.date,
            'run time': stats.run_time,
            'run distance': stats.run_distance
        }

        if update_form.is_valid():
            update_form.save()
            
        return render(request, 'health_hub_update.html', context)

forms.py:

class StatUpdateForm(forms.ModelForm):
    class Meta:
        model = Stats
        fields = ('user', 'weight', 'run_distance', 'run_time')

Любая помощь будет оценена по достоинству!

Попробуйте это:

#forms.py 
class StatUpdateForm(forms.ModelForm):
    class Meta:
        model = Stats
        fields = ('user', 'weight', 'run_distance', 'run_time')

    def __init__(self, *args, **kwargs):
        super(StatUpdateForm, self).__init__(*args, **kwargs)
        self.fields['user'].label = "New user Label"
        self.fields['weight'].label = "New weightLabel"
        self.fields['run_distance'].label = "New run_time Label

или

Решение второе:

Добавьте атрибуты меток к полям.

#models.py

class Stats(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, label="User Label"))
    date = models.DateField(auto_now=True, label="Date Label"))
    weight = models.DecimalField(max_digits=5, decimal_places=2)
    run_distance = models.IntegerField(default=5)
    run_time = models.TimeField()

попробуйте это, это работает с django 4.1

class ProductForm(forms.ModelForm):

    class Meta:
        model = ProductModel
        fields = ('name', 'og_price', 'discount', 'sell_price', 'dis_pice', 'info', 'status', )

        

        labels = {
            'name':'Product Name',
            'og_price':'Original Price',
            'discount':'Product Discount',
            'sell_price':'Product Selling Price',
            'dis_pice':'Product Discounted Price',
            'info':'Product Information',
            'status':'Product Availability Status',
        }

По умолчанию в случае модельных форм метка поля формы устанавливается в verbose_name поля модели, с первым символом заглавной буквы.

Если вам нужны какие-либо настройки для меток формы, вы можете передать метки в виде словаря с ключами в виде имен филов и значениями в виде вырезанных значений меток в класс Meta модели формы.

Например :

labels = {‘name’: ‘Enter Name’, ‘password’: ‘Enter Password’, ‘email’: ‘Enter Email’ } 

class StatUpdateForm(forms.ModelForm):
    class Meta:
        model = Stats
        fields = [‘name’, ‘password’, ‘email’]
        labels = {‘name’: ‘Enter Name’, ‘password’: ‘Enter Password’, ‘email’: ‘Enter Email’ }
    
Вернуться на верх