【问题标题】:Assigning values to a new user from a view从视图中为新用户分配值
【发布时间】:2011-08-07 18:53:05
【问题描述】:

我有一个带有 models.py 的应用程序文件管理器,如下所示:

from django.db import models
from django.contrib.auth.models import User
from fileman.fields import AutoForeignKey

from django.utils.translation import ugettext as _

class Setting(models.Model):
    owner = AutoForeignKey(User, unique=True, related_name='fileman_Setting')
    root = models.CharField(max_length=250, null=True)
    home = models.CharField(max_length=250, null=True)
    buffer = models.TextField(blank=True)
    class Meta:
        permissions = (
            ("can_fm_list", _("Can look files list")),
            ("can_fm_add", _("Can upload files")),
            ("can_fm_rename", _("Can rename files")),
            ("can_fm_del", _("Can move files to basket")),
            ("can_fm_destruct", _("Can delete files")),
        )
    def __unicode__(self):
        return unicode(self.owner)
    def __init__(self, *args, **kwargs):
        super(Setting, self).__init__(*args, **kwargs)
        if not self.root:
            self.root = None
            self.home = None
    def writeBuffer(self, data):
        self.buffer = data
        self.save()

我想在用户注册时为其分配 root、home 和权限:这就是我在 userprofile/views.py 中的内容

from fileman.models import Setting

def register(request):
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password1')
            newuser = User.objects.create_user(username=username, email='', password=password)

            if form.cleaned_data.get('email'):
                newuser.email = form.cleaned_data.get('email')
                EmailValidation.objects.add(user=newuser, email=newuser.email)
            newuser.save()
            # Fileman Settings
            newuser.fileman_Setting.owner = newuser
            newuser.fileman_Setting.root = '/home/aton2/ajunkkil/Django/basedraft/uploads'
            print(newuser.fileman_Setting.root)
            newuser.fileman_Setting.home = '/home/aton2/ajunkkil/Django/basedraft/uploads/useruploads'
            print(newuser.fileman_Setting.home)
            newuser.save()

            return HttpResponseRedirect('%scomplete/' % request.path_info)
    else:
        form = RegistrationForm()

    template = "userprofile/account/registration.html"
    data = { 'form': form, }
    return render_to_response(template, data, context_instance=RequestContext(request))

该应用程序在管理员中具有一项功能,允许在那里为用户设置根文件夹和主文件夹。但我希望它在用户注册时自动发生。我得到了所有者就好了,但是即使print(newuser.fileman_Setting.root) 是正确的,home 和 root 仍然是“无”。我错过了什么?

fileman/admin.py

from django.contrib import admin
from fileman.models import *

class SettingAdmin(admin.ModelAdmin):
   list_display = ('owner', 'root', 'home')

admin.site.register(Setting, SettingAdmin)

【问题讨论】:

  • 正确格式化您的源代码 - 它不可读。

标签: python django django-models django-admin django-views


【解决方案1】:

您还需要保存newuser.fileman_Setting,因为 django 不会自动保存对模型的更改。

【讨论】:

【解决方案2】:

我不知道AutoForeignKey 是做什么的,但假设它类似于标准的 ForeignKey,则相反的 fileman_Setting 指的是 QuerySet。

ForeignKey 是一对多关系,其中一个是定义 FK 的一侧,而反向关系 - 通过在 related_name 中分配的名称访问 - 是多的,因此由 QuerySet 表示.因此,不是在单个 Setting 上设置 home 和 root 字段,而是在 QuerySet 上定义任意属性,然后将其忽略。

在任何情况下,听起来您可能都想要一个 OneToOneField。完成此操作后,正如 Dmitry 所说,您需要记住保存它。

【讨论】:

  • 如何将 Settings 类 Meta 中的权限分配给用户?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-25
  • 2016-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多