Python 如何对已使用CreateView的第一个模型中具有主键的模型使用CreateView

Python 如何对已使用CreateView的第一个模型中具有主键的模型使用CreateView,python,django,Python,Django,大家好,我正试图创建一个简单的待办事项列表,但我遇到了一些麻烦,首先我想创建一个任务,在其中我想创建一些活动,这是我无法完成的问题。 如何使用CreateView结束向其传递任务的pk来创建活动,以及如何在创建后反向传递相同的任务详细信息 非常感谢 型号: from django.db import models from django.core.urlresolvers import reverse class List(models.Model): title = models.C

大家好,我正试图创建一个简单的待办事项列表,但我遇到了一些麻烦,首先我想创建一个任务,在其中我想创建一些活动,这是我无法完成的问题。 如何使用CreateView结束向其传递任务的pk来创建活动,以及如何在创建后反向传递相同的任务详细信息

非常感谢

型号:

from django.db import models
from django.core.urlresolvers import reverse

class List(models.Model):
    title = models.CharField(blank=True, max_length=100)

class  Meta:
    ordering = ['id']

def __str__(self):
    return self.title

def get_absolute_url(self):
    return reverse('task-detail', kwargs={'pk': self.pk})


PRIORITY_CHOICES = (
    (1, 'Low'),
    (2, 'Normal'),
    (3, 'High')
)

class Item(models.Model):
    title = models.CharField(blank=True, max_length=100)
    created = models.DateTimeField(auto_now=False, auto_now_add=True)
    updated = models.DateTimeField(auto_now=True, auto_now_add=False)
    priority = models.IntegerField(choices=PRIORITY_CHOICES, default=2)
    completed = models.BooleanField(default=False)
    todo_list = models.ForeignKey(List)

class Meta:
    ordering = ['-priority', 'title']
观点:

class TaskDetailView(DetailView):
    model = List

class TaskCreateView(CreateView):
    model = List
    fields = ['title']
    success_url = '/home'

class TaskUpdateView(UpdateView):
    model = List
    fields = ['title']
    template_name = 'core/update.html'
    success_url = '/home'

class TaskDeleteView(DeleteView):
    model = List
    success_url = reverse_lazy('home')


class ActivityCreateView(CreateView):
    model = Item
    fields = 'title', 'priority', 'completed'
    success_url = '/home'

class ActivityUpdateView(UpdateView):
    model = Item
    fields = 'title', 'priority', 'completed'
    template_name = 'core/update_actvity.html'
    success_url = '/home'

class ActivityDeleteView(DeleteView):
    model = Item
    success_url = reverse_lazy('home')
网址:

从django.conf.url导入url,包括
从django.contrib导入管理
从core.views导入ActivityCreateView、ActivityDeleteView、ActivityUpdateView
从core.views导入TaskDetailView、TaskCreateView、TaskUpdateView、TaskDeleteView、Home、MyView
URL模式=[
url(r“^admin/”,admin.site.url),
url(r“^accounts/”,包括('allauth.url'),
url(r'^$',Home.as_view(),name=“index”),
url(r'^home/$,MyView.as_view(),name=“home”),
url(r“^task/(?P[0-9]+)/$”,TaskDetailView.as_view(),name='task-detail'),
url(r“^task/(?P[0-9]+)/update/$”,TaskUpdateView.as_view(),name='task-update'),
url(r'^task/(?P[0-9]+)/delete/$”,TaskDeleteView.as_view(),name='task-delete'),
url(r“^task/add/$”,TaskCreateView.as_view(),name='task-create'),

]

在表单中,您可以为父列表定义隐藏输入,然后在表单中使用有效方法检索父列表。。。例如:

class ItemModelForm(forms.ModelForm):
    list_pk = forms.IntegerField(widget=forms.HiddenInput)

class Meta:
    model = Item
    fields = ['...']
然后:

def form_valid(self, form):
    parent_list = List.objects.get(pk=form.cleaned_data['list_pk'])
    ...
    ...

您好,谢谢您的帮助,但现在我在/task/activity/add/'list\u pk'收到了关键错误。我可以查看完整的回溯吗?是的,我用回溯输入了一个新答案。我输入form\u class=ItemModelForm现在没有显示错误,但它没有保存数据。您必须将其保存在form\u有效方法中……也就是说,您必须调用save()在form_valid方法末尾的实例上
def form_valid(self, form):
    parent_list = List.objects.get(pk=form.cleaned_data['list_pk'])
    ...
    ...