Как обозначить поля на форме 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’ }