如何在 django-crispy-form 字段中预填充一个值
how to pre-fill a value in django-crispy-form field
我正在尝试使用模型 class、forms.py 创建函数,然后使用 django-crispy-forms 包。表单已正确呈现,但我试图排除特定字段并用当前用户电子邮件预填充它。我已经能够在 forme.py 中排除它,但我不知道如何将当前用户电子邮件添加到它。
models.py
class Product(models.Model):
name = models.CharField(max_length=36)
price = models.PositiveIntegerField()
description = models.TextField()
quantity = models.PositiveIntegerField()
image = models.ImageField()
user = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.name
forms.py
from django import forms
from .models import *
class AddProductForm(forms.ModelForm):
class Meta:
model = Product
fields = '__all__'
exclude = ['user']
views.py
def Addproduct(request):
form = AddProductForm()
if request.method == 'POST':
form = AddProductForm(request.POST, request.FILES)
if form.is_valid():
form.save()
messages.success(request, "Products Added Successfully")
return redirect('product')
context = {"form":form}
return render(request, "core/addproduct.html", context)
addproduct.html
<form method="post">
{% csrf_token %}
<div class="form-row">
<div class="form-group col-md-4 mb-0">
{{ form.name|as_crispy_field }}
</div>
<div class="form-group col-md-4 mb-0">
{{ form.price|as_crispy_field }}
</div>
<div class="form-group col-md-4 mb-0">
{{ form.quantity|as_crispy_field }}
</div>
</div>
{{ form.description|as_crispy_field }}
<div class="form-row">
<div class="form-group col-md-12 mb-0">
{{ form.image|as_crispy_field }}
</div>
</div>
<button class="au-btn au-btn--block au-btn--green m-b-20" type="submit">register supplier</button>
</form>
在您看来,如果表单有效,只需将您想要的任何字段添加到 form.instance
:
def Addproduct(request): # Note function names should ideally be in snake_case
form = AddProductForm()
if request.method == 'POST':
form = AddProductForm(request.POST, request.FILES)
if form.is_valid():
form.instance.user = request.user # Assuming you use login_required decorator so request.user would be a user instance (instead of anonymous user instance) if this line runs
form.save()
messages.success(request, "Products Added Successfully")
return redirect('product')
context = {"form":form}
return render(request, "core/addproduct.html", context)
我正在尝试使用模型 class、forms.py 创建函数,然后使用 django-crispy-forms 包。表单已正确呈现,但我试图排除特定字段并用当前用户电子邮件预填充它。我已经能够在 forme.py 中排除它,但我不知道如何将当前用户电子邮件添加到它。
models.py
class Product(models.Model):
name = models.CharField(max_length=36)
price = models.PositiveIntegerField()
description = models.TextField()
quantity = models.PositiveIntegerField()
image = models.ImageField()
user = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.name
forms.py
from django import forms
from .models import *
class AddProductForm(forms.ModelForm):
class Meta:
model = Product
fields = '__all__'
exclude = ['user']
views.py
def Addproduct(request):
form = AddProductForm()
if request.method == 'POST':
form = AddProductForm(request.POST, request.FILES)
if form.is_valid():
form.save()
messages.success(request, "Products Added Successfully")
return redirect('product')
context = {"form":form}
return render(request, "core/addproduct.html", context)
addproduct.html
<form method="post">
{% csrf_token %}
<div class="form-row">
<div class="form-group col-md-4 mb-0">
{{ form.name|as_crispy_field }}
</div>
<div class="form-group col-md-4 mb-0">
{{ form.price|as_crispy_field }}
</div>
<div class="form-group col-md-4 mb-0">
{{ form.quantity|as_crispy_field }}
</div>
</div>
{{ form.description|as_crispy_field }}
<div class="form-row">
<div class="form-group col-md-12 mb-0">
{{ form.image|as_crispy_field }}
</div>
</div>
<button class="au-btn au-btn--block au-btn--green m-b-20" type="submit">register supplier</button>
</form>
在您看来,如果表单有效,只需将您想要的任何字段添加到 form.instance
:
def Addproduct(request): # Note function names should ideally be in snake_case
form = AddProductForm()
if request.method == 'POST':
form = AddProductForm(request.POST, request.FILES)
if form.is_valid():
form.instance.user = request.user # Assuming you use login_required decorator so request.user would be a user instance (instead of anonymous user instance) if this line runs
form.save()
messages.success(request, "Products Added Successfully")
return redirect('product')
context = {"form":form}
return render(request, "core/addproduct.html", context)