gpt4 book ai didi

python - 如何在 form_valid 中获取对象 ID?

转载 作者:行者123 更新时间:2023-12-05 03:57:17 26 4
gpt4 key购买 nike

我正在尝试使用 Django 在发布应用程序上制作评论表单,问题是我似乎无法获得它自己的对象 ID,知道吗?

#views.py
class MyFormView(FormView):
form_class = CommentForm
success_url = "/"

def form_valid(self,form,*args,**kwargs):
comment = form.save(commit=False)
comment.message=Message.objects.get(id=???)
comment.save()
return super(MyFormView, self).form_valid(form)
#urls.py
urlpatterns = [
path('', MessageListView.as_view(),name="messaging-main"),
path('new', MessageCreateView.as_view(),name="messaging-new"),
path('post/<int:pk>', MessageDetailView.as_view(),name="messaging-detail"),
path('my_form',MyFormView.as_view(),name="form-view")
]
#forms.py
class CommentForm(forms.ModelForm):
class Meta:
model = Comment
fields = ['comment']
#models.py
class Message(models.Model):
date_posted = models.DateTimeField(default=timezone.now)
message = models.TextField()
image = models.ImageField(default="")


def __str__(self):
return self.message

class Comment(models.Model):
message = models.ForeignKey(Message,on_delete=models.CASCADE)
comment = models.TextField(max_length=50)
date_posted = models.DateTimeField(default=timezone.now)

def __str__(self):
return "Comment on {}".format(str(self.date_posted))

def get_absolute_url(self):
return reverse("messaging-detail",kwargs={"id":self.id})

如果我要替换 ???例如 7,它将在 ID 为 7 的消息(或帖子)上发布每条评论,但我希望评论发布在我看到的消息上。任何帮助表示赞赏

最佳答案

您需要在请求中对消息的主键(或其他属性)进行编码。您可以通过多种方式做到这一点:例如,通过将其编码在触发的 URL 中,或者通过表单中的隐藏字段,然后将其作为 POST 参数发送。

例如,我们可以添加一个 message_id url 的参数:

#urls.py

urlpatterns = [
# …,
path('my_form/<b><int:message_pk></b>', MyFormView.as_view(), name="form-view")
]

然后在表单中,我们可以使用参数,通过在self.kwargs中访问它:

#views.py

class MyFormView(FormView):
form_class = CommentForm
success_url = "/"

def form_valid(self,form,*args,**kwargs):
form.instance.<b>message_id = self.kwargs['message_pk']</b>
self.object = form.save()
return super(MyFormView, self).form_valid(form)

通过使用 message_id ,我们避免额外调用数据库来获取相应的 Message .

在为 MessageDetailView 呈现的模板中查看 <form>然后将需要使用具有相应消息主键的 URL 作为操作 URL。例如,如果上下文对象名称是 'message' ,你可以传递它:

<form action="<b>{% url 'form-view' message_pk=message.pk %}</b>" method="post">

</form>

关于python - 如何在 form_valid 中获取对象 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58679944/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com