Django Error Field 'id'期望一个数字,但得到<Transfernews: Transfernews object (1)>。



我在尝试提交comments时遇到此错误。有人能告诉我怎么修吗?

我的型号.py:

class Transfernews(models.Model):
player_name = models.CharField(max_length=255)
player_image = models.CharField(max_length=2083)
player_description = models.CharField(max_length=3000)
date_posted = models.DateTimeField(default=timezone.now)
class Comment(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
transfernews = models.ForeignKey(Transfernews, related_name="comments", on_delete=models.CASCADE)
body = models.TextField()
date_added = models.DateTimeField(auto_now_add=True)
def __str__(self):
return '%s - %s' % (self.transfernews.player_name, self.user.username)

我的表格.py:

class CommentForm(forms.ModelForm):
class Meta:
model = Comment
fields = ('body',)

我的观点.py:

def transfer_targets(request):
transfernews = Transfernews.objects.all()
news = request.POST.get("transfer_id", None)
form = CommentForm(request.POST or None)
if form.is_valid():
new_comment = form.save(commit=False)
new_comment.user = User.objects.get(id=request.user.id)
new_comment.transfernews_id = Transfernews.objects.get(id=news)
new_comment.save()
return redirect(request.path_info)
return render(request, 'transfernews.html', {'transfernews': transfernews, 'form': form})

我的html文件:

{% for transfer in transfernews %}
<div>Comment and let us know your thoughts</div>
<form method="POST">
{% csrf_token %}
<input type="hidden" name="transfer_id" value="{{ transfer.id}}">
<div class="bg-alert p-2">
<div class="d-flex flex-row align-items-start">

</div>
<div class="mt-2 text-right">
{{ form|crispy }}
<br>
<button class="btn btn-primary btn-sm shadow-none" type="submit">Post comment</button>

<button class="btn btn-outline-primary btn-sm ml-1 shadow-none" type="button">Cancel</button>
</div>
</div>
</form>
{% endfor %}

在您的视图中,您应该使用:

new_comment.transfernews_id = news

或:

new_comment.transfernews= Transfernews.objects.get(id=news)

但后者效率较低,因为您需要进行额外的数据库查询。

因此,您可以将视图重写为:

from django.contrib.auth.decorators import login_required
@login_required
def transfer_targets(request):
transfernews = Transfernews.objects.all()
if request.method == 'POST':
form = CommentForm(request.POST)
if form.is_valid():
news = request.POST['transfer_id']
form.instance.user = request.user
form.instance.transfernews_id =news
form.save()
return redirect(request.path_info)
else:
form = CommentForm()
return render(request, 'transfernews.html', {'transfernews': transfernews, 'form': form})

注意:您可以使用@login_required装饰器[Django-doc]。

相关内容

最新更新