假设我有一个简单的模型:
class Contact(models.Model):
owner = models.ForeignKey(User, editable=False)
first_name = models.CharField(max_length=255,)
last_name = models.CharField(max_length=255,)
email = models.EmailField()
我想在创建对象时自动为其设置所有者(request.user,登录用户)。我搜索了很多不同的选项,但其中大多数与您在管理方面的操作方式有关,而其他选项对我不起作用。我试过这个,例如http://blog.jvc26.org/2011/07/09/django-automatically-populate-request-user然后我尝试了很多方法来覆盖保存方法或某种 pre_save 信号的东西。似乎没有什么能解决问题,我只是得到一个错误
IntegrityError at /new
null value in column "owner_id" violates not-null constraint
这样做的正确方法是什么?我知道这很简单,但我就是找不到方法。
...编辑...我的创建视图如下所示:
class CreateContactView(LoginRequiredMixin, ContactOwnerMixin, CreateWithInlinesView):
model = models.Contact
template_name = 'contacts/edit_contact.html'
form_class = forms.ContactForm
inlines = [forms.ContactAddressFormSet]
def form_valid(self, form):
obj = form.save(commit=False)
obj.owner = self.request.user
obj.save()
return HttpResponseRedirect(self.get_success_url())
def get_success_url(self):
return reverse('contacts-list')
def get_context_data(self, **kwargs):
context = super(CreateContactView, self).get_context_data(**kwargs)
context['action'] = reverse('contacts-new')
return context
到目前为止,这只是我试图解决该问题的一种方法。我从http://blog.jvc26.org/2011/07/09/django-automatically-populate-request-user找到了该解决方案