我有一个看起来像这样的模型:
class MyModel(models.Model):
rate = models.CharField(max_length=100)
amount = models.FloatField()
userid = models.CharField(max_length=100)
date = models.CharField() //This should be used to save the date
def save(self): # ALL the signature
super(MyModel, self).save()
和表格:
class MyForm(forms.ModelForm):
rate = forms.CharField()
amount = forms.FloatField()
class Meta:
model = MyModel
fields = ("rate", "amount")
def save(self, commit=True):
send = super(MyForm, self).save(commit=False)
if commit:
send.save()
return send
实际上,一旦用户使用表单,我的表单就会将字段rate
和amount
保存在数据库中。我想在数据库中保存提交表单的user
,保存表单的日期/时间以及其他一些用户不能提交但可以“自动”保存的数据。我该如何在Django中做到这一点?
答案 0 :(得分:2)
首先,如果您提及用户,则最好使用ForeignKey
[Django-doc]:
from django import models
from django.contrib.auth import get_user_model
class MyModel(models.Model):
rate = models.CharField(max_length=100)
amount = models.FloatField()
user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE, blank=True, editable=False)
created = models.DateTimeField(auto_now_add=True)
ForeignKey
保证将引用用户。此外,如果您请求,它也会延迟加载用户对象。
您也可以在DateTimeField
[Django-doc]设置为True
的情况下设置**auto_now_add=...
parameter [Django-doc]。这意味着在构造记录时将使用该值。
然后您可以在视图中设置用户对象,例如:
from app.forms import MyForm
from django.contrib.auth.decorators import login_required
@login_required
def some_view(request):
if request.method == 'POST':
form = MyForm(request.POST, request.FILES)
if form.is_valid():
form.instance.user = request.user
form.save()
return redirect('some_view_name')
else:
form = MyForm()
return render(request, 'some_template.html', {'form': form})
由于您要为该记录设置用户,因此您可能应该使用@login_required
decorator [Django-doc]装饰视图。