问题已结束:请参阅Alasdair发布的答复以获取解决方案。
我正在将Pets实例添加到表中:
class Pet(models.Model):
petName = models.CharField(max_length=100, default='My Pet')
petImage = models.ImageField(default='default.png', blank=True)
author = models.ForeignKey(User, on_delete=models.CASCADE, default=None)
上面的代码很好,但是最后一行上的“用户”为我提供了我在下拉菜单中(当被视为表单时)在我的应用上注册的所有用户。我希望作者(即已登录的用户)自动与此新宠物对象关联。
我不知道内置auth_user数据库的来龙去脉,所以我不知道如何引用这个特定用户实例,即登录的那个实例。我知道request.user在其他页面上返回的用户已登录,我只是不知道如何将变量输入此模型。有什么想法吗?
*更新:包含的views.py *
@login_required(login_url="/accounts/login/")
def add_pet(request):
if request.method == 'POST':
form = forms.AddPet(request.POST, request.FILES)
if form.is_valid():
instance = form.save(commit=False)
instance.save()
return redirect('yourPet')
else:
form = forms.AddPet()
return render(request, 'records/pet_create.html', {'form': form},)
答案 0 :(得分:0)
首先,编辑模型表格以删除author
字段。
class AddPet(forms.ModelForm):
class Meta:
model = Pet
fields = ['petName', 'petImage'] # leave out author
然后在您的视图中,可以在保存实例之前将instance.author
设置为request.user
。
if request.method == 'POST':
form = forms.AddPet(request.POST, request.FILES)
if form.is_valid():
instance = form.save(commit=False)
instance.author = request.user
instance.save()
return redirect('yourPet')
最后一步是考虑用户未登录但您已经使用login_required
装饰器解决了这种情况。