使用超过 1 个参数创建视图 form_valid 时出现 404 错误
404 error on CreateView form_valid with more than 1 arguement
我的证明应用程序 CreateView
有两个参数 "user" 和 "post"。用户需求由 self.object.user = self.request.user
满足 我如何满足 self.object.post
需求。我是 Django 的新手。如果我违反了任何 Django 规则,我深表歉意
models.py
User = get_user_model()
class Proof(models.Model):
user = models.ForeignKey(User, related_name='proofmade')
post = models.ForeignKey(Post, related_name='proofmade')
made_at = models.DateTimeField(auto_now=True)
image_of_task= models.ImageField()
proof_you_made_it = models.ImageField()
suggestions = models.TextField(max_length=1000)
def __str__(self):
return self.post.title
views.py
User = get_user_model()
class ProofCreate(LoginRequiredMixin, CreateView):
model = Proof
fields = ('image_of_task', 'proof_you_made_it', 'suggestions')
def form_valid(self, form, *args, **kwargs):
self.object = form.save(commit=False)
self.object.user = self.request.user
###### I think the following line may be wrong ##########
slug = self.kwargs.get('slug')
print(slug)
self.object.post = get_object_or_404(Post, slug=slug)
self.object.save()
return super().form_valid(form)
urls.py
app_name = 'proof'
urlpatterns = [
url(r'^new_proof/$', views.ProofCreate.as_view(), name='new_proof'),
如果要从视图中的 self.kwargs
访问 slug
,则需要 URL 中的 slug
。例如:
url(r'^new_proof/(?P<slug>[-\w]+)/$', views.ProofCreate.as_view(), name='new_proof')
您不需要 username
,因为您正在从 self.request.user
获取用户。在您的第二次尝试中,post.slug
不正确,因为变量名称不能包含点。
在视图中,我会使用 slug = self.kwargs['slug']
,除非您希望它是可选的。目前 get()
returns None
,所以您稍后会在代码中遇到错误。
我的证明应用程序 CreateView
有两个参数 "user" 和 "post"。用户需求由 self.object.user = self.request.user
满足 我如何满足 self.object.post
需求。我是 Django 的新手。如果我违反了任何 Django 规则,我深表歉意
models.py
User = get_user_model()
class Proof(models.Model):
user = models.ForeignKey(User, related_name='proofmade')
post = models.ForeignKey(Post, related_name='proofmade')
made_at = models.DateTimeField(auto_now=True)
image_of_task= models.ImageField()
proof_you_made_it = models.ImageField()
suggestions = models.TextField(max_length=1000)
def __str__(self):
return self.post.title
views.py
User = get_user_model()
class ProofCreate(LoginRequiredMixin, CreateView):
model = Proof
fields = ('image_of_task', 'proof_you_made_it', 'suggestions')
def form_valid(self, form, *args, **kwargs):
self.object = form.save(commit=False)
self.object.user = self.request.user
###### I think the following line may be wrong ##########
slug = self.kwargs.get('slug')
print(slug)
self.object.post = get_object_or_404(Post, slug=slug)
self.object.save()
return super().form_valid(form)
urls.py
app_name = 'proof'
urlpatterns = [
url(r'^new_proof/$', views.ProofCreate.as_view(), name='new_proof'),
如果要从视图中的 self.kwargs
访问 slug
,则需要 URL 中的 slug
。例如:
url(r'^new_proof/(?P<slug>[-\w]+)/$', views.ProofCreate.as_view(), name='new_proof')
您不需要 username
,因为您正在从 self.request.user
获取用户。在您的第二次尝试中,post.slug
不正确,因为变量名称不能包含点。
在视图中,我会使用 slug = self.kwargs['slug']
,除非您希望它是可选的。目前 get()
returns None
,所以您稍后会在代码中遇到错误。