从Djang的表格中找不到

2024-05-15 08:00:29 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的一个django中,我有一个在数据库中创建新产品的表单:

在视图.py在

class ProductCreateView(LoginRequiredMixin, CreateView):
    template_name = "products/my-products.html"
    model = Product
    form_class = AddNewProductForm

    def form_valid(self, form):
        obj = form.save(commit=False)
        obj.user = self.request.user
        obj.save()
        return HttpResponseRedirect("/my-products/")

在表单.py在

^{pr2}$

使用上述方法,一切都能完美地工作。在

我想将当前日期和时间添加到日期和时间小部件中,因此我尝试了以下操作:

在表单.py在

class AddNewProductForm(forms.ModelForm):
    date = forms.DateField(label='date', initial=datetime.date.today(),
                           widget=forms.SelectDateWidget(years=AVAILABLE_YEAR_CHOICES))
    time = forms.TimeField(label="time", initial=datetime.datetime.now().strftime("%H:%M"))
    class Meta:
        model = Product
        fields = ["title", "desrciption"]

当我使用这个时,我得到一个错误,日期字段是None。在

我不知道为什么会这样。只使用Meta-works中的字段,但做一些自定义操作却没有任何效果。在


Tags: pyselfformobj表单datetimedatemodel
2条回答

您可以使用get_initial_for_field方法

AVAILABLE_YEAR_CHOICES = list(range(1960, 2051))

class AddNewProductForm(forms.ModelForm):
    class Meta:
        model = Product
        fields = ["date", "time", "title", "desrciption"]
        widgets = {'date': forms.SelectDateWidget(years=AVAILABLE_YEAR_CHOICES)}

    def get_initial_for_field(self, field, field_name):
        if field_name == 'date':
            return datetime.date.today()
        if field_name == 'time':
            return datetime.datetime.now().time()
        return super().get_initial_for_field(field, field_name)

也不是datetime.datetime.now().strftime("%H:%M")做下一步datetime.datetime.now().time()

您还需要指定第二个示例中的字段:

class AddNewProductForm(forms.ModelForm):
    date = forms.DateField(label='date', initial=datetime.date.today(),
                           widget=forms.SelectDateWidget(years=AVAILABLE_YEAR_CHOICES))
    time = forms.TimeField(label="time", initial=datetime.datetime.now().strftime("%H:%M"))
    class Meta:
        model = Product
        fields = ["title", "description", "date", "time"]

相关问题 更多 >