I'm trying to figure out how to label my Django form fields- at the moment I'm unable to change them. I have tried amending the field names and adding labels within models.py, but it throws an error, I'm not sure where to add them.
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')
Any help would be appreciated!
CodePudding user response:
try this it's worked with 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',
}
CodePudding user response:
Try this:
#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
or
Solution two:
Add label attributes to fields.
#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()
CodePudding user response:
By default in case of model forms The form field’s label is set to the verbose_name of the model field, with the first character capitalized.
If you want any customizations on form labels you can pass labels in form of dictionary with keys as fiels name and values as cutomized label values in Meta class of model form.
For example :
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’ }