我已经尝试实现我在这里看到的其他一些帖子提供的解决方案,但似乎没有任何效果。我对 Django 和后端总体来说是全新的,所以我可能只是缺乏技能。
情况是我让用户生成 listing
基于 Django 模型 Listings
使用 ModelForm。除了我无法将当前登录的用户设置为 listing
的用户之外,一切似乎都在工作。 .我了解到用户存储在 request.user
,但我似乎无法在我的表单中设置它,并且我始终收到此错误:IntegrityError at /create
NOT NULL constraint failed: auctions_listings.listing_user_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'
]
我发现的一些建议表明我可以排除用户要求,然后在我的 View 中自己设置它,但是每当我尝试排除 listing_user
时,我遇到了这个错误:TypeError: ListingsForm.Meta.exclude cannot be a string. Did you mean to type: ('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)
关于python - 在Django中创建对象时将当前登录的用户设置为模型中的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64274464/