【发布时间】:2018-09-30 21:02:53
【问题描述】:
我正在尝试在我的模型中为 first_name、lastname 和 email 设置默认值
得到以下型号
from django.db import models
from django.contrib.auth.models import User
class Project(models.Model):
firstname = models.CharField(max_length=30, blank=True, verbose_name=_("label_general_firstname"), default=User.first_name)
lastname = models.CharField(max_length=30, blank=True, verbose_name=_("label_general_lastname"), default=User.last_name)
email = models.EmailField(blank=True, verbose_name=_("label_general_email"), default=User.email)
运行迁移时,我收到以下错误:
ValueError: Cannot serialize: <django.db.models.query_utils.DeferredAttribute object at 0x7f459e8aac50>
我让用户通过 SSO 进入,他们已经填写了某些字段。 在使用使用此模型的表单时,我想将它们用作默认值。
尝试了几种方法,但都没有得到有效的结果。
编辑:
这是我从这个应用程序中理解工作流程的方式:
在projects/urls.py 我看到以下内容
url(r'^(?P<pk>[0-9]+)$',
login_required(PermCheckUpdateView.as_view(
model = Project,
form_class = ProjectGeneralForm,
template_name = "project/general.html",
success_url = "/projects/{id}")),
name = "project_update_general"),
所以PermCheckUpdateView 视图似乎正在呈现表单
在app/views.py我可以看到这样的视图:
class PermCheckUpdateView(ObjectPermCheckMixin,CallableSuccessUrlMixin,UpdateView):
# make the form readonly if its only readable
def get_form(self):
form = super(PermCheckUpdateView, self).get_form()
if not self.object.has_write_permission(self.request.user) and not self.request.user.is_staff:
for field in form.fields.values():
field.widget.attrs["readonly"] = "readonly"
if hasattr(form,"helper"):
form.helper.inputs = []
return form
回去吧,这里是ObjectPermCheckMixin
class ObjectPermCheckMixin(ObjectPermCheckGETMixin, ObjectPermCheckPOSTMixin):
pass
还有ObjectPermCheckGETMixin 和ObjectPermCheckPOSTMixin
class ObjectPermCheckGETMixin(object):
def get(self, request, *args, **kwargs):
self.object = self.get_object()
if not self.object.has_read_permission(self.request.user) and not request.user.is_staff:
raise PermissionDenied
return super(ObjectPermCheckGETMixin, self).get(request, *args, **kwargs)
class ObjectPermCheckPOSTMixin(object):
def post(self, request, *args, **kwargs):
self.object = self.get_object()
if not self.object.has_write_permission(self.request.user) and not request.user.is_staff:
raise PermissionDenied
return super(ObjectPermCheckPOSTMixin, self).post(request, *args, **kwargs)
我尝试在他们两个中设置 request.user,但到目前为止都失败了。
其中一个错误是 __init__ 需要 2 个输入,但只给出了一个。
我不太了解 Django,无法自己解决这个问题。 非常感谢任何帮助。
【问题讨论】:
-
你不能这样做,在这个模型中,甚至没有(相关的)
User。这是表单、视图等应该执行的操作。 -
也尝试访问表单中的用户对象,但出现了不同的问题stackoverflow.com/questions/52545946/…
标签: django django-models