gpt4 book ai didi

Django 在创建时为对象设置创建者/所有者

转载 作者:行者123 更新时间:2023-12-02 15:28:27 28 4
gpt4 key购买 nike

假设我有一个简单的模型:

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然后我尝试了很多方法来覆盖 save 方法或某种 pre_save 信号内容。似乎没有任何效果,我只是收到一个错误

IntegrityError at /new
null value in column "owner_id" violates not-null constraint

正确的做法是什么?我知道这很简单,但我就是找不到方法。

...编辑...我的创建 View 如下所示:

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 找到了该解决方案

最佳答案

假设您使用ContactForm ModelForm:

def contact(request):
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
contact = form.save(commit=False)
contact.owner = request.user
contact.save()
return HttpResponseRedirect('/thanks/')
else:
# do stuff

关于Django 在创建时为对象设置创建者/所有者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22151529/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com