Python Django从表单隐藏日期字段

Python Django从表单隐藏日期字段,python,django,forms,Python,Django,Forms,我希望对用户隐藏日期字段,但将其作为表单的一部分进行处理,以便知道表单的发送日期。我还希望在Django管理员下显示此日期 型号.py class Purchase(models.Model): payment_type = models.ForeignKey('CardChoices', related_name='Payment Types') card_name = models.CharField(max_length=26, default=None, validators

我希望对用户隐藏日期字段,但将其作为表单的一部分进行处理,以便知道表单的发送日期。我还希望在Django管理员下显示此日期

型号.py

class Purchase(models.Model):
   payment_type = models.ForeignKey('CardChoices', related_name='Payment Types')
   card_name = models.CharField(max_length=26, default=None, validators=[alphanumeric_RE]) 
   card_number = models.CharField(max_length=19, default=None)
   security_code = models.IntegerField(max_length=3, default=None) 
   expiry_date = models.DateField(default=datetime.now)
   date = models.DateField(auto_now=True, default=datetime.now)

    def __str__(self):
        return self.card_name

    class Meta:
        ordering = [ "date" ]
class PurchaseForm(forms.ModelForm):
    date = forms.DateField(widget=extras.SelectDateWidget, initial=date.today)

    class Meta:
        model = Purchase
        fields = "__all__"
forms.py

class Purchase(models.Model):
   payment_type = models.ForeignKey('CardChoices', related_name='Payment Types')
   card_name = models.CharField(max_length=26, default=None, validators=[alphanumeric_RE]) 
   card_number = models.CharField(max_length=19, default=None)
   security_code = models.IntegerField(max_length=3, default=None) 
   expiry_date = models.DateField(default=datetime.now)
   date = models.DateField(auto_now=True, default=datetime.now)

    def __str__(self):
        return self.card_name

    class Meta:
        ordering = [ "date" ]
class PurchaseForm(forms.ModelForm):
    date = forms.DateField(widget=extras.SelectDateWidget, initial=date.today)

    class Meta:
        model = Purchase
        fields = "__all__"
我尝试使用exclude标记将字段隐藏在Meta下,只在字段下添加我需要的字段,但它仍然显示所有字段。我尝试过使用
forms.HiddenInput()
,它确实隐藏了输入,但也对管理员隐藏了值。虽然我找到了这个显示日期的,但似乎重复了两次:

    def get_readonly_fields(self, request, obj=None): #duplicating entries
        if obj:
             return ["date"]
        return self.readonly_fields
设置了
HiddenInput
后,表单会隐藏字段,但仍然要求输入有效日期

如果我的理解正确,我也不能在表单上使用
auto\u now\u add
。有什么建议吗?

Django 1.11

import datetime
from django import forms

class PurchaseForm(forms.Form):
    date = forms.DateTimeField(initial=datetime.datetime.now, 
        widget=forms.HiddenInput())

从PurchaseFrom中删除日期。与其字段=(“\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu”),不如逐个编写所有字段。稍后,如果模型发生更改,您可能希望控制表单显示的内容。。无论如何,如果它不在Meta中的“字段”列表中,它就不应该出现。您现在可以在模型中添加auto_。非常好,谢谢。我将注意到这一点。非常避免出现明显的问题……您不需要设置
default=
,因为您现在已经将
auto\u设置为true。此外,您可能需要考虑
auto\u now\u add
是否更适合您所做的事情,因为
auto\u now
将在每次修改对象时更新日期。文档包含所有关于字段和日期时间的信息