我正在运行Django 1.6.x
为了扩展我的用户,我添加了另一个存储数据的模型:
class UserProfile (models.Model):
user = models.ForeignKey(User)
height = models.IntegerField(blank=True, null=True)
现在我想添加一个视图,允许用户在那里添加自己的信息。从django.views.generic.edit.CreateView
开始,但也希望至少提供编辑/更新一个。
所以我添加了导入并创建了一个视图:
from django.views.generic.edit import CreateView, UpdateView
# ....
class UserProfileCreateView(CreateView):
model = UserProfile
fields = ['height']
我还在urls.py中添加了条目:
url(r'^userprofile/new/$', login_required(UserProfileCreateView.as_view()), name="add_userprofile")
但是现在我仍然坚持如何以正确的方式分配用户ID。我希望在后台设置此字段。任何提示?
答案 0 :(得分:15)
你可以这样做:
class UserProfileCreateView(CreateView):
model = UserProfile
fields = ['height']
def form_valid(self, form):
user = self.request.user
form.instance.user = user
return super(UserProfileCreateView, self).form_valid(form)
此代码适用于Python 2.7.x
答案 1 :(得分:2)
class UserProfileCreateView(CreateView):
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.user = self.request.user
self.object.save()
return super(ModelFormMixin, self).form_valid(form)
答案 2 :(得分:0)
为避免出现诸如必须是“用户”实例这样的错误,您想尝试一下。
def form_valid(self, form):
owner = self.request.user
print("Bot owner1", owner)
tenant = get_object_or_404(Tenant, user=owner)
print("Bot owner2 ", tenant)
form.instance.tenant = tenant
return super().form_valid(form)
原来是
print("Bot owner1", owner)
和
print("Bot owner2 ", tenant)
有不同的结果。
除form_valid
方法之外的任何其他方法都可能带来安全风险。
即我可以通过检查浏览器上的元素来编辑初始值,然后输入新值。如果您的代码无法验证我的输入,请!!!!你被黑了。