Python 在Django中创建对象时,将当前登录的用户设置为模型中的用户
我试着实现我在这里看到的其他一些帖子提供的解决方案,但似乎没有任何效果。我是django和后端的新手,所以我可能只是缺乏技能 情况是,我让用户使用ModelForm基于django模型生成一个Python 在Django中创建对象时,将当前登录的用户设置为模型中的用户,python,django,django-models,django-forms,modelform,Python,Django,Django Models,Django Forms,Modelform,我试着实现我在这里看到的其他一些帖子提供的解决方案,但似乎没有任何效果。我是django和后端的新手,所以我可能只是缺乏技能 情况是,我让用户使用ModelForm基于django模型生成一个列表。除了我无法将当前登录的用户设置为列表的用户之外,一切似乎都正常。我知道该用户存储在request.user中,但我似乎无法在我的表单中设置该用户,我始终会遇到以下错误: IntegrityError at/create 非空约束失败:拍卖物品。物品\u用户\u id 以下是我的用户和列表模型的代码:
列表。除了我无法将当前登录的用户设置为列表
的用户之外,一切似乎都正常。我知道该用户存储在request.user
中,但我似乎无法在我的表单中设置该用户,我始终会遇到以下错误:
IntegrityError at/create
非空约束失败:拍卖物品。物品\u用户\u id
以下是我的用户和列表模型的代码:
class User(AbstractUser):
pass
class Listings(models.Model):
title = models.CharField(max_length=64, default="")
description = models.TextField(default="")
image = models.URLField(blank=True, null=True)
initial_bid = models.DecimalField(max_digits=8, decimal_places=2)
category = models.CharField(max_length=64, default="Misc")
listing_user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="listing_user")
# listing.bid.all()????
这是我的表格:
from .models import Listings
class ListingsForm(forms.ModelForm):
class Meta:
model = Listings
exclude = ('listing_user')
fields = [
'title',
'description',
'image',
'initial_bid',
'category'
]
我发现的一些建议表明,我可以排除用户需求,然后在我的视图中自行设置,但每当我尝试排除列表用户时,我都会遇到以下错误:
TypeError:ListingsForm.Meta.exclude不能是字符串。您的意思是键入:('listing_user',)?
尝试所建议的方法也无济于事
最后,我的观点是:
def create(request):
form = ListingsForm(request.POST or None)
if form.is_valid():
form.save()
form = ListingsForm()
context = {
'form': form
}
return render(request, "auctions/create.html", context)
排除应该是一个列表或元组。您有两个选择:
exclude = ('listing_user',)
or
exclude = ['listing_user']
表格:
from .models import Listings
class ListingsForm(forms.ModelForm):
class Meta:
model = Listings
exclude = ('listing_user',)
fields = [
'title',
'description',
'image',
'initial_bid',
'category'
]
观点:
def create(request):
form = ListingsForm(request.POST or None)
if form.is_valid():
form.instance.listing_user = request.user
form.save()
form = ListingsForm()
context = {
'form': form
}
return render(request, "auctions/create.html", context)
非常感谢。我需要研究form.instance
做了什么,因为我确实做了类似的事情,但显然缺少了关键组件。