在Django中仅插入表单模型的特定字段
我有一个Django模型和对应的表单,用来往数据库中的一个有三列的表里插入和读取数据。我想要的功能是,只通过表单插入前两列的数据,而把第三列(一个日期字段)留空。不过,我还需要在后面显示所有三列的数据到HTML页面上。当我在表单中使用exclude来排除第三列时,HTML部分显示得很好,但在用form.save()保存表单时,它却试图在第三列插入空值,这样就报错了。有没有人能帮我在保存表单时完全忽略第三列呢?
Class sales(models.Model)
product_name = models.CharField(max_length=500)
quantity=models.FloatField()
sale_date=models.DateField()
我在寻找一个解决方案,想要重写save()方法,在保存之前忽略这个字段。但我找不到相关的资料。
3 个回答
-1
在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这种时候,我们可以去一些技术论坛,比如StackOverflow,寻求帮助。在这些论坛上,很多人会分享他们的经验和解决方案。
比如,有人可能会问:“我在运行我的程序时,遇到了一个错误,应该怎么解决?”然后,其他人就会根据自己的经验,给出一些建议和解决办法。这种互动可以帮助我们更快地找到问题的根源,并学习到新的知识。
总之,技术论坛是一个很好的学习和交流的地方,特别是对于刚开始学习编程的小白们来说,能够从中获得很多实用的信息和技巧。
from django import forms
from .models import sales
class YourForm(forms.ModelForm):
class Meta:
model = sales
fields = ['product_name', 'quantity'] # Specify only the required fields
def save(self, commit=True):
instance = super(YourForm, self).save(commit=False)
# Skip saving the sale_date column
# You can set other values if needed
# For example: instance.sale_date = some_value
if commit:
instance.save()
return instance
0
你可以考虑根本不重写保存方法,而是在你的视图逻辑中处理你想保存的内容和方式。比如:
from django.utils import timezone
if request.method == 'POST':
form = MyForm(request.POST)
if form.is_valid():
new_object = form.save(commit=False)
if commit: # or some logical check, if needed
new_object.sale_date = timezone.now().date()
new_object.save()
你也可以在保存方法中明确指定你的字段:
.save(update_fields=['your_field_name', 'your_other_field_name'])
...这样做会让django只写入你声明的字段。关于sale_date
字段,你的意图可能不太清楚,但你可以考虑让它可以为空和留空,像这样:
sale_date = models.DateField(null=True, blank=True)
...这样的话,你可以在它为空的时候再更新,比如说。
0
我觉得在模型中,sale_date 应该有一个 auto_add=True
的属性。这样一来,Django 就会自动把日期设置为当前日期。