[英]How to modify Django form before save?
在我的項目中,每個用戶都可以有多個敵人,如下所示:
楷模
class EnemyModel(models.Model):
name = models.CharField(max_length=128)
weapon = models.CharField(max_length=128)
related_user = models.ForeignKey(UserProfile)
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
只有用戶可以在他的個人資料中添加敵人,所以我做了一個這樣的表格:
形式
class AddEnemyForm(forms.ModelForm):
class Meta:
model = EnemyModel
exclude = ['related_user'] # only current user
我的想法是修改視圖中的排除字段,但它不起作用:
意見
def add_enemy(request):
args={}
if request.method == "POST":
form = AddEnemyForm(request.POST)
form.related_user = request.user # error
# form.related_user_id = request.user.id # also error
if form.is_valid():
form.save()
return HttpResponse("<h1>Done!</h1>")
else:
args.update(csrf(request))
args["form"]=form
return render_to_response("add_enemy.html",args)
args.update(csrf(request))
args["form"]=AddEnemyForm()
return render_to_response("add_enemy.html",args)
如何在保存之前修改表單?
使用form.instance
:
def add_enemy(request):
args={}
if request.method == "POST":
form = AddEnemyForm(request.POST)
# form.instance is the instance to be saved
form.instance.related_user = request.user.userprofile
if form.is_valid():
form.save()
return HttpResponse("<h1>Done!</h1>")
else:
args.update(csrf(request))
args["form"]=form
return render_to_response("add_enemy.html",args)
args.update(csrf(request))
args["form"]=AddEnemyForm()
return render_to_response("add_enemy.html",args)
請注意, enemymodel.related_user
應為UserProfile
, request.user
為User
。 您需要使用request.user.userprofile
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.