我在我的django网站上有一个表单,用户在那里请求硬币,信息被发送到管理员让我处理。我想自动获得填写表单的用户,而不需要他们自己做。
下面是model.py文件:
class Requestpayment (models.Model):
username= models.ForeignKey(User, on_delete= models.CASCADE, null=True)
useremail= models.CharField(max_length=100)
accountmail= models.CharField(max_length=100)
accountphonenumber=models.CharField(max_length=15)
coinsrequested=models.ForeignKey(Requestamount, on_delete= models.SET_NULL, null=True)
created= models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.accountmail
forms.py:
class Requestpaymentform (ModelForm):
class Meta:
model = Requestpayment
fields = '__all__'
以及views.py:
@login_required(login_url='login')
def redeemcoins (request):
form = Requestpaymentform
if request.method =='POST':
form = Requestpaymentform(request.POST)
if form.is_valid():
form = form.save(commit=False)
username = request.user
form.save()
return redirect ('home')
我很确定有什么地方不对劲,但我不知道是什么(我在django很新),反正表单总是显示网站中的所有用户,让当前用户选择他们是谁。
redeem coins page
我也尝试排除该部分的形式,但它没有工作,它只是显示在管理空白。
谢谢你,谢谢你。
2条答案
按热度按时间yzuktlbb1#
您需要将它指派给 Package 在表单中的执行严修,因此:
但是,将此字段命名为
user
比命名为username
更有意义。在模型中,您还可以将username
字段设置为不可编辑,这样它就不会出现在表单中:注意:通常使用**
settings.AUTH_USER_MODEL
[Django-doc]来引用用户模型比直接使用User
**模型[Django-doc]要好。更多信息,请参见文档的 referencing theUser
model 部分。gjmwrych2#
当你使用
username= models.ForeignKey(User, on_delete= models.CASCADE, null=True)
时,Django会在你的数据库中添加一个名为user_id的字段,它允许Django找到用户对象来请求付款。您可以使用user_id字段在Requestpayment中添加用户对象。
1.如果您想在视图中显示用户,则不需要在字段列表中传递用户名字段。
1.现在,执行此操作以使用户进入视图。
最好使用user而不是username,因为它是User对象,而不是简单的字段。
请为我的英语!!!