【发布时间】:2015-10-20 15:46:06
【问题描述】:
我的 Django 项目中有一个名为 Event 的模型:
from django.db import models
from django.contrib.auth.models import User
class Event(models.Model):
organizer = models.CharField(blank=False, max_length=200) # TODO
author = models.ForeignKey(User)
这个模型还附有一个表格:
从 django 导入表单 from .models 导入事件
class EventForm(forms.ModelForm):
class Meta:
model = Event
fields = ['organizer',
]
(还有其他字段,但不相关)
如果我想自动填充author 字段,最佳做法是什么?目前,保存模型的视图是这样保存的:
def event_created(request):
form = EventForm(request.POST)
if form.is_valid():
obj = form.save(commit=False)
obj.author = request.user
obj.save()
这个工作,但我很担心,因为这意味着当其他视图保存它时,它必须跳过相同的循环。有没有办法告诉模型本身“当我救你时,将用户设置为当前用户”?问题是模型不知道是哪个请求触发了它的保存,如果我从视图中提供请求,那似乎又是代码重复......
【问题讨论】:
-
@madzohan 这个答案声称模型表单应该保存用户,但您仍然必须将请求发送到它的保存方法。那是如何节省任何东西的?
-
form = EventForm(request.POST, request=request); if form.is_valid(): form.save()...如果您想要更清晰的代码 - 使用基于类的视图