传递外键以从 url 创建视图
Passing ForeginKey to CreateView from url
我一直在使用 Django 文档中的示例,但到目前为止它没有解决我的问题:https://docs.djangoproject.com/en/1.9/topics/class-based-views/generic-editing/#models-and-request-user
基本上我有这个模型:
models.py
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
group = models.ForeignKey(Trip, on_delete=models.CASCADE)
urls.py
path('trip/<int:pk>/discussion/', PostCreate.as_view(), name='trip-detail-discussion'),
views.py
# 1st attempt
class PostCreate(CreateView):
model = Post
template_name = 'tripplanner/postcreate.html'
fields = ['title', 'content']
success_url = '/'
def form_valid(self, form, **kwargs):
context = super(PostCreate, self).get_context_data(**kwargs)
context['pk'] = self.kwargs['pk']
form.instance.author = self.request.user
form.instance.group = context.get('pk')
# print(self.trip)
print(form.instance.group)
return super(PostCreate, self).form_valid(form)
# 2nd attempt
class PostCreate(CreateView):
model = Post
template_name = 'tripplanner/postcreate.html'
fields = ['title', 'content']
success_url = '/'
def dispatch(self, request, *args, **kwargs):
self.trip = get_object_or_404(Trip, pk=kwargs['pk'])
return super(PostCreate, self).dispatch(request, *args, **kwargs)
def form_valid(self, form):
form.instance.author = self.request.user
form.instance.group = self.trip.id
print(form.instance.group)
return super(PostCreate, self).form_valid(form)
两次尝试都给我这个错误:
Cannot assign "1": "Post.group" must be a "Trip" instance.
知道如何将其传递给数据库吗?
组应该是 Type
实例而不是整数。
form.instance.group = self.trip
我一直在使用 Django 文档中的示例,但到目前为止它没有解决我的问题:https://docs.djangoproject.com/en/1.9/topics/class-based-views/generic-editing/#models-and-request-user
基本上我有这个模型:
models.py
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
group = models.ForeignKey(Trip, on_delete=models.CASCADE)
urls.py
path('trip/<int:pk>/discussion/', PostCreate.as_view(), name='trip-detail-discussion'),
views.py
# 1st attempt
class PostCreate(CreateView):
model = Post
template_name = 'tripplanner/postcreate.html'
fields = ['title', 'content']
success_url = '/'
def form_valid(self, form, **kwargs):
context = super(PostCreate, self).get_context_data(**kwargs)
context['pk'] = self.kwargs['pk']
form.instance.author = self.request.user
form.instance.group = context.get('pk')
# print(self.trip)
print(form.instance.group)
return super(PostCreate, self).form_valid(form)
# 2nd attempt
class PostCreate(CreateView):
model = Post
template_name = 'tripplanner/postcreate.html'
fields = ['title', 'content']
success_url = '/'
def dispatch(self, request, *args, **kwargs):
self.trip = get_object_or_404(Trip, pk=kwargs['pk'])
return super(PostCreate, self).dispatch(request, *args, **kwargs)
def form_valid(self, form):
form.instance.author = self.request.user
form.instance.group = self.trip.id
print(form.instance.group)
return super(PostCreate, self).form_valid(form)
两次尝试都给我这个错误:
Cannot assign "1": "Post.group" must be a "Trip" instance.
知道如何将其传递给数据库吗?
组应该是 Type
实例而不是整数。
form.instance.group = self.trip