【问题标题】:How do I pass Foreign key value in views.py?如何在views.py 中传递外键值?
【发布时间】:2021-03-04 18:18:49
【问题描述】:

enter image description here

如何访问views.py 中的savedata.project_detail? 每个用户将拥有任意数量的项目。每个项目将有一个唯一的主键。我想在 def checklist(request) 函数中访问该主键。 我只从 html 模板中获取模型属性“checked_value”。另一个属性“project_detail”应该自动获取主键 pf 模型“project”。但我不知道如何在 def checklist 函数中获取模型项目的主键。如果有人可以在这里提供帮助。

这里是models.py

class project(models.Model):
    project_name = models.CharField(max_length = 20)
    date = models.DateField(("Date"), default=datetime.date.today)
    user = models.ForeignKey(User, on_delete=models.CASCADE)


class check_done(models.Model):
    checked_value = models.CharField(max_length = 200)
    project_detail = models.ForeignKey(project, to_field="id", db_column="project_detail", on_delete=models.CASCADE)

这里是views.py

def show(request):
    log_user = request.user
    projects = project.objects.filter(user=log_user)
    return render(request, 'project.html',{'p':projects})

@login_required(login_url='/login/')
def add(request):
    if request.method == "POST":
        data = request.POST['data']
        new = project(project_name = data, user=request.user)
        new.save()
        return render(request, 'addproject.html')
    else:
        return render(request, 'addproject.html')

@login_required(login_url='/login/')
def checklist(request):
    if request.method == "POST":
            savedata = check_done()
            savedata.project_detail = ??
            print(savedata.project_detail)
            savedata.checked_value = request.POST.get('abc')
            savedata.save()
            return render(request, 'checklist.html')
            
    else:
        return render(request, 'checklist.html')

【问题讨论】:

    标签: python django django-models django-views foreign-keys


    【解决方案1】:

    您需要将项目模型分配给 savedata.project_detail 属性:

    @login_required(login_url='/login/')
    def checklist(request):
        if request.method == "POST":
            savedata = check_done()
            savedata.project_detail = project.objects.get(id=request.POST['project_detail_id'])
            savedata.checked_value = request.POST.get('abc')
            savedata.save()
            return render(request, 'checklist.html')
    
        else:
            return render(request, 'checklist.html')
    

    【讨论】:

      【解决方案2】:

      我认为您可以创建或获取要与savedata 对象关联的project 对象并将其直接分配给project_detail 属性,或者您可以将项目主键分配给project_detail_id属性。

      【讨论】:

      • 很抱歉,但我仍然不清楚答案。你能详细说明一下吗?或者你可以写语法? @IliaNovoselov
      • 查看卡洛的回答
      猜你喜欢
      • 2022-08-03
      • 1970-01-01
      • 2020-11-02
      • 2014-01-13
      • 1970-01-01
      • 2022-01-21
      • 2016-11-22
      • 2019-09-21
      • 2016-03-12
      相关资源
      最近更新 更多