Sve*_*len 11 django django-models django-forms modelform
我有一个模型,我排除了两个字段,create_date即created_by字段和字段.现在我在使用该save()方法时出现"Not Null"错误,因为它created_by是空的.
我试图在这样的save()方法之前将用户ID添加到表单:form.cleaned_data['created_by'] = 1和form.cleaned_data['created_by_id'] = 1.但这一切都不起作用.
有人可以向我解释我如何"添加"其他东西到提交的模型中,以便它可以节省吗?
class Location(models.Model):
name = models.CharField(max_length = 100)
created_by = models.ForeignKey(User)
create_date = models.DateTimeField(auto_now=True)
class LocationForm(forms.ModelForm):
class Meta:
model = Location
exclude = ('created_by', 'create_date', )
Run Code Online (Sandbox Code Playgroud)
Kon*_*ant 18
由于您已经排除了字段created_by和create_date表单,因此尝试分配它们form.cleaned_data没有任何意义.
这是你可以做的:
如果您有视图,则只需使用form.save(commit=False)然后设置值即可created_by
def my_view(request):
if request.method == "POST":
form = LocationForm(request.POST)
if form.is_valid():
obj = form.save(commit=False)
obj.created_by = request.user
obj.save()
...
...
Run Code Online (Sandbox Code Playgroud)
`
如果您使用的是Admin,则可以覆盖save_model()方法以获得所需的结果.
class LocationAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
obj.created_by = request.user
obj.save()
Run Code Online (Sandbox Code Playgroud)
将用户作为参数传递给表单构造函数,然后使用它来设置模型实例的 created_by 字段:
def add_location(request):
...
form = LocationForm(user=request.user)
...
class LocationForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
user = kwargs.pop('user')
super(forms.ModelForm, self).__init__(*args, **kwargs)
self.instance.created_by = user
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3811 次 |
| 最近记录: |