如何将当前记录的用户分配给django中的模型对象

时间:2015-03-08 15:16:48

标签: python django

我有一位用户,他将创建公司资料。用户是由django的django.contrib.auth.models创建的。所以问题是将当前登录的用户分配给公司简介的用户。 我的models.py是:

class Company_Profile(models.Model):
  user = models.ForeignKey(User)
  logo = models.ImageField(_('Company Logo'), upload_to='image', null=True, blank=True)
  address = models.TextField(_('Contact Address'), max_length=50)
  phone_no = models.IntegerField(_('Contact No'), max_length=12)

我的forms.py是:

class Company_Prof(forms.ModelForm):
  class Meta:
    model = Company_Profile
    fields = ('logo','address','phone_no')

我对公司简介的看法是:

@login_required()
def company_prof(request):
 if request.method == 'POST':
    comp_prof = Company_Prof(request.POST or None)
    comp_prof.user = User.objects.get(username=request.user) 
    if comp_prof.is_valid():
        save_prof = comp_prof.save(commit=False)
        save_prof.save()
        messages.success(request, 'Thank you for Registration')
        return HttpResponseRedirect('company/'+str(save_prof.id))
else:
    comp_prof =Company_Prof()
variables = RequestContext(request, {
    'comp_form': Company_Prof()})
return render_to_response("comp_profile.html",
                          locals(),
                          context_instance = RequestContext(request))

请帮帮我..

2 个答案:

答案 0 :(得分:2)

comp_prof.user = User.objects.get(username=request.user) 

不正确的。 request.user is already a User.

comp_prof.user = request.user

答案 1 :(得分:1)

两件事:一,使用commit = False保存对象将创建对象,但是在调用commit = True之前不会将其提交到数据库。因此,您的对象可以在这两行之间进行修改。

二:您的请求中的当前用户对象可用作“用户”。调用request.user将返回用户对象。

因此,对于您的情况,您需要在再次调用save之前分配用户对象,如下所示:

save_prof = comp_prof.save(commit=False)
save_prof.user = request.user
save_prof.save()