簡體   English   中英

Django-查詢以從其他模型檢索pk

[英]Django - Query to retrieve pk from other model

我正在嘗試創建查詢以從數據庫中獲取當前帖子的pk。 然后將其設置為新帖子的外鍵。 我正在使用formview,而我嘗試從中檢索“ id”的模型稱為Projects。 ID是模型項目的主鍵。

我將如何處理?

pk = 5,因為我不知道如何獲得當前的。

views.py

class ProjectDetailToDoForm(FormView):
    model = ProjectsToDo
    form_class = ProjectToDoForm
    success_url = '../..'

    @method_decorator(login_required)
    def dispatch(self, request, *args, **kwargs):
        return super(ProjectDetailToDoForm, self).dispatch(request, *args, **kwargs)

    def form_valid(self,form):
        self.object = form.save(commit=False)
        self.object.project = Projects.objects.get(pk=5)
        self.object.save()

        return super(ProjectDetailToDoForm, self).form_valid(form)

class ProjectDetail(generic.DetailView):
    model = Projects
    context_object_name = 'indprojects'
    template_name = 'projectpage.html'

    def get_context_data(self, *args, **kwargs):
        context = super(ProjectDetail, self).get_context_data(*args, **kwargs)
        context['todolist'] = ProjectsToDo.objects.order_by('project_tododate')
        context['todoform'] = ProjectToDoForm()
        context['form'] = ProjectForm(instance=Projects.objects.get(slug=self.kwargs['slug']))
        return context

    def get_queryset(self):
        return Projects.objects.filter(user=self.request.user)

    @method_decorator(login_required)
    def dispatch(self, request, *args, **kwargs):
        return super(ProjectDetail, self).dispatch(request, *args, **kwargs)

models.py

class Projects(models.Model):
    user = models.ForeignKey(User)
    slug = models.SlugField()
    project_title = models.CharField(max_length=30)
    project_shortdesc = models.CharField(max_length=248)
    project_desc = models.TextField()

    def save(self):
        super(Projects, self).save()
        date = datetime.date.today()
        self.slug = '%i%i%i%s' % (
            date.year, date.month, date.day, slugify(self.project_title)
        )
        super(Projects, self).save()


class ProjectsToDo(models.Model):
    project_tododate = models.DateField()
    project_tododesc = models.TextField(max_length = 500)
    project = models.ForeignKey(Projects)

    def __unicode__(self):
            return '%s %s' % (self.project_tododesc, self.project_tododate)

我猜您使用URL定義了活動項目。 在這種情況下,您可以執行以下操作:

urls.py

url(r'^(?P<project_slug>[\w-]+)/add_todo/$', 
    views.ProjectDetailToDoForm.as_view(),
    name='add_todo',
),
...

視圖

def form_valid(self, form):
    self.object = form.save(commit=False)
    project = Project.objects.get(slug=self.kwargs["project_slug"])
    self.object.project = project
    self.object.save()

    return super(ProjectDetailToDoForm, self).form_valid(form)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM