【发布时间】:2017-04-10 21:21:08
【问题描述】:
我正在尝试从 NON Classe Based View 在我的 django 项目中为管理员和应用程序创建新用户,我有模型、视图和模板,我在其中获取表单正如我要展示的下一个代码中所说的那样..
models.py
class Users(models.Model):
# Fields
username = models.CharField(max_length=255, blank=True, null=True)
password = models.CharField(max_length=12, blank=True, null=True)
organization_id = models.ForeignKey('ip_cam.Organizations', editable=True, null=True, blank=True)
slug = extension_fields.AutoSlugField(populate_from='created', blank=True)
created = models.DateTimeField(auto_now_add=True, editable=False)
last_updated = models.DateTimeField(auto_now=True, editable=False)
# Relationship Fields
user_id = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True, blank=True)
class Meta:
ordering = ('-created',)
def __str__(self):
return u'%s' % self.user_id
def get_absolute_url(self):
return reverse('ip_cam_users_detail', args=(self.slug,))
def get_update_url(self):
return reverse('ip_cam_users_update', args=(self.slug,))
def __unicode__(self): # __str__
self.organization_id=self.request.POST.get('organization_id')
return unicode(self.user_id, self.organization_id)
# This overrides the standard save method for a user, creating a new user in the admin and getting it to the template at the same time
def save(self, *args, **kwargs):
self.password = make_password(self.password)
self.user_id, created = User.objects.get_or_create(username=self.username, password=self.password, is_staff=True)
self.user_id.groups.add(Group.objects.get(name='admin'))
self.id = self.user_id.id
super(Users, self).save(*args, **kwargs)
views.py
def UsersCreate(request):
model = Users
var = {}
var = user_group_validation(request)
userInc = Users.objects.get(id=request.user.id).organization_id.pk
request.session['userInc'] = userInc
if var['group'] == 'superuser':
object_list = Users.objects.all()
organization = Organizations.objects.all()
roles_choice = DefaultLandingPage.objects.all()
if var['group'] == 'admin' or var['group'] == 'user':
object_list = Users.objects.filter(organization_id=request.session['userInc'])
organization = Organizations.objects.filter(id=request.session['userInc'])
roles_choice = DefaultLandingPage.objects.exclude(role=1)
url = request.session['url']
tpl = var['tpl']
role = var['group']
organization_inc = Organizations.objects.filter(id=request.session['userInc'])
template = get_template(app+u'/users_form.html')
return HttpResponse(template.render(locals()))
这里的问题是尝试覆盖它时保存不起作用,根本没有创建用户......你能帮我看看这次我做错了什么吗?提前致谢。
【问题讨论】:
-
您在哪里尝试创建用户 - 您的视图中没有任何内容可以创建或更新用户。
-
不是 def save() 这样做的吗?如果不是那么那应该是我的错误...但是正如您所看到的,我最后在模型用户中放了一个 def 保存...
-
好吧,我看你在我看来是这样说的,好的,我会在那里试一试
-
如果你从不调用 save 方法,你为什么期望它做任何事情?感觉好像我在这里遗漏了一些东西......
-
好的,让我再解释一下,以前我使用基于类的视图进行保存过程,然后模型中的 def 保存工作得很好,并在管理员用户和我的应用程序中创建了用户用户,但是我必须应用一个过滤器,它似乎只能直接从模板渲染表单字段,所以我将 UsersCreate View 从基于类更改为使用表单渲染模板......我所做的就是,然后def save in models 刚刚停止创建用户,既然你提到我必须在我看来实现它,我意识到这是一个很好的点......让我试试吧
标签: django function templates save django-views