将数据传递到表单 Django
Passing Data into Forms Django
假设;
我有一个简单的系统,在屏幕上有一个选项列表。每个项目都有一个按钮,因此您可以在项目 selected 旁边添加多个补充 items/information,但不能更改项目 selected。
每个项目都有一个唯一的 ID,我想将其传递到表单中,以便评论始终与该项目相关联。
我有一个模型,其中包含一个将评论链接到该项目的外键,并且 Modelform 有效,但我必须 select 从下拉列表中选择该项目,我希望将此信息预先填充到表单中。
这看起来很简单,但我已经绕了好几天了。
任何指针将不胜感激
这是 'comments'
的模型
class roundscore(models.Model):
scoreid = models.ForeignKey('Score', on_delete=CASCADE)
shot_1 = models.IntegerField(default=0, blank=True, null=True)
shot_2 = models.IntegerField(default=0, blank=True, null=True)
shot_3 = models.IntegerField(default=0, blank=True, null=True)
shot_4 = models.IntegerField(default=0, blank=True, null=True)
shot_5 = models.IntegerField(default=0, blank=True, null=True)
shot_6 = models.IntegerField(default=0, blank=True, null=True)
end_1 = models.IntegerField(default=0, blank=True, null=True)
tens = models.IntegerField(default=0, blank=True, null=True)
这是表格
class AddRoundScore(forms.ModelForm):
class Meta:
model = roundscore
fields = [
'shot_1',
'shot_2',
'shot_3',
'shot_4',
'shot_5',
'shot_6',
'end_1',
'tens',
'scoreid'
]
这是风景
def addscorecard (request, pk):
posts = get_object_or_404(Score, pk=pk)
post = Score.objects.values('id', 'rndname__roundname').filter(id = pk)
print('Post', post)
print('Request', type(post))
if request.method == 'POST':
form = AddRoundScore(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.scoreid = post
post.save()
print('Errors', form.errors.as_data())
return redirect('readscorecard', post.pk)
else:
form = AddRoundScore()
print('Errors', form.errors.as_data())
return render(request, 'score/addscorecard.html', {'form': form, 'posts': posts, 'post': post})
scoreid 字段链接到记录分数的 table。
我尝试将 pk 添加到函数中,以便将其传递给分数 ID,而不是在输入镜头值时从列表中挑选它,这可能会导致错误,选择错误的分数 ID。我不能使用与 scoreid 关联的名称,因为如果尝试同一轮,这可能是相同的。
我想要做的就是使用从分数页面上的按钮中获取的值预填充 scoreid 字段
<td><h5><a class="btn btn-outline-dark btn-block" href="{% url 'score:addscorecard' post.id %}">Add Score</a></h5></td>
<td><h5><a class="btn btn-outline-dark btn-block" href="{% url 'score:readscorecard' post.id %}">Read Score</a></h5></td>
为完整起见,这里是 url 文件
path("addscorecard/<int:pk>", views.addscorecard, name="addscorecard"),
我确信解决方案非常简单,但我无法深入了解它
谢谢
已排序。
小学生错误,模型中的 scoreid
应该是整数字段而不是外键字段。
然后是将视图post.scoreid = post
更改为post.scoreid = posts.id
并且有效
假设;
我有一个简单的系统,在屏幕上有一个选项列表。每个项目都有一个按钮,因此您可以在项目 selected 旁边添加多个补充 items/information,但不能更改项目 selected。 每个项目都有一个唯一的 ID,我想将其传递到表单中,以便评论始终与该项目相关联。 我有一个模型,其中包含一个将评论链接到该项目的外键,并且 Modelform 有效,但我必须 select 从下拉列表中选择该项目,我希望将此信息预先填充到表单中。 这看起来很简单,但我已经绕了好几天了。 任何指针将不胜感激
这是 'comments'
的模型 class roundscore(models.Model):
scoreid = models.ForeignKey('Score', on_delete=CASCADE)
shot_1 = models.IntegerField(default=0, blank=True, null=True)
shot_2 = models.IntegerField(default=0, blank=True, null=True)
shot_3 = models.IntegerField(default=0, blank=True, null=True)
shot_4 = models.IntegerField(default=0, blank=True, null=True)
shot_5 = models.IntegerField(default=0, blank=True, null=True)
shot_6 = models.IntegerField(default=0, blank=True, null=True)
end_1 = models.IntegerField(default=0, blank=True, null=True)
tens = models.IntegerField(default=0, blank=True, null=True)
这是表格
class AddRoundScore(forms.ModelForm):
class Meta:
model = roundscore
fields = [
'shot_1',
'shot_2',
'shot_3',
'shot_4',
'shot_5',
'shot_6',
'end_1',
'tens',
'scoreid'
]
这是风景
def addscorecard (request, pk):
posts = get_object_or_404(Score, pk=pk)
post = Score.objects.values('id', 'rndname__roundname').filter(id = pk)
print('Post', post)
print('Request', type(post))
if request.method == 'POST':
form = AddRoundScore(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.scoreid = post
post.save()
print('Errors', form.errors.as_data())
return redirect('readscorecard', post.pk)
else:
form = AddRoundScore()
print('Errors', form.errors.as_data())
return render(request, 'score/addscorecard.html', {'form': form, 'posts': posts, 'post': post})
scoreid 字段链接到记录分数的 table。 我尝试将 pk 添加到函数中,以便将其传递给分数 ID,而不是在输入镜头值时从列表中挑选它,这可能会导致错误,选择错误的分数 ID。我不能使用与 scoreid 关联的名称,因为如果尝试同一轮,这可能是相同的。 我想要做的就是使用从分数页面上的按钮中获取的值预填充 scoreid 字段
<td><h5><a class="btn btn-outline-dark btn-block" href="{% url 'score:addscorecard' post.id %}">Add Score</a></h5></td>
<td><h5><a class="btn btn-outline-dark btn-block" href="{% url 'score:readscorecard' post.id %}">Read Score</a></h5></td>
为完整起见,这里是 url 文件
path("addscorecard/<int:pk>", views.addscorecard, name="addscorecard"),
我确信解决方案非常简单,但我无法深入了解它
谢谢
已排序。
小学生错误,模型中的 scoreid
应该是整数字段而不是外键字段。
然后是将视图post.scoreid = post
更改为post.scoreid = posts.id
并且有效