Django - 使用表单自动填充django admin外的created_by字段 [英] Django - Auto populate created_by field outside django admin using form

查看:170
本文介绍了Django - 使用表单自动填充django admin外的created_by字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

用户被要求通过填写由modelformset_factory创建的表单在django管理员之外创建一个新的实例。问题是我不知道如何将request.user传递给表单,所以当保存表单时,created_by字段无效。



models.py:来自django.db导入模型

 来自django.contrib.auth.models import的
用户

class ezApp(models.Model):
name = models.SlugField(max_length = 50,unique = True)
date_created = models.DateTimeField('date created',auto_now_add = True)
date_updated = models.DateTimeField('date updated',auto_now = True)
created_by = models.ForeignKey(User)
in_use = models.BooleanField()
pre>

views.py

  from django.shortcuts import render_to_response 
从ezmapping.models import *
from django.forms.models import modelformset_factory

def setName(request):
ezAppFormSet = modelformset_factory(ezApp,extra = 1,fields =('name'))
formset = ezAppFormSet(queryset = ezApp.objects.none ())
如果request.method =='POST':
formset = ezAppFormSet(request.POST,request.FILES)
如果formset.is_valid():
formset。 save()
return render_to_response(project / manage_new.html,{'formset':formset,'title':New},context_instance = RequestContext(request))


解决方案

您可以自己设置 created_by 字段在保存实例之前。



执行以下操作:

  if formset.is_valid():
instances = formset.save(commit = False)
例如在实例中:
instance.created_by = request.user
instance.save()

有关此功能的文档是 here


The users are asked to create a new instance outside the django admin by filling a form created by the modelformset_factory. The problem is that I dont know how to pass request.user to the form so the created_by field is not valid when the form is saved.

models.py:

from django.db import models
from django.contrib.auth.models import User

class ezApp(models.Model):
    name = models.SlugField(max_length=50, unique=True )
    date_created = models.DateTimeField('date created', auto_now_add=True)
    date_updated = models.DateTimeField('date updated', auto_now=True)
    created_by = models.ForeignKey(User)
    in_use = models.BooleanField()

views.py

from django.shortcuts import render_to_response
from ezmapping.models import *
from django.forms.models import modelformset_factory

def setName(request):
    ezAppFormSet = modelformset_factory(ezApp, extra=1, fields=('name'))
    formset = ezAppFormSet(queryset=ezApp.objects.none())
    if request.method == 'POST':
        formset = ezAppFormSet(request.POST, request.FILES)
        if formset.is_valid():
            formset.save()
    return render_to_response("project/manage_new.html", {'formset': formset, 'title': "New"}, context_instance=RequestContext(request))

解决方案

You can set the created_by field yourself before saving the instance.

Do something like this:

if formset.is_valid():
    instances = formset.save(commit=False)
    for instance in instances:
        instance.created_by = request.user
        instance.save()

The documentation about this feature is here.

这篇关于Django - 使用表单自动填充django admin外的created_by字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆