【问题标题】:How to solve value error -cannot assign... in Django如何在 Django 中解决值错误 - 无法分配...
【发布时间】:2021-11-29 14:21:01
【问题描述】:

我在我的模型中添加了一个新行,将最近的项目分配到我可以打开一些图表的页面,但是如果我点击保存按钮,我会收到以下错误消息,我无法弄清楚原因:

ValueError at /mpa/project_details/1/
Cannot assign "'1'": "ProjectDetailsAdmin.projekt" must be a "Projekt" instance.

views.py

@user_passes_test(lambda u: u.is_superuser)
def project_details(request, projekt_id):
    projekt = Projekt.objects.raw('SELECT projekt_id, id FROM stressz_profile WHERE stressz_profile.projekt_id=%s', [projekt_id])
    projects_details = Profile.objects.filter(projekt_id=projekt_id)
    allprojects = Projekt.objects.all()
    ... lots of queries here

context = {
    ...
    'projekt': projekt,
    'projects_details': projects_details,
    'allprojects': allprojects,
    ...
    

}

if request.method == 'POST':
    projekt = request.POST.get('projekt')
    projekt_name = request.POST.get('projekt_name')
    r01 = request.POST.get('r01') 
    
    szervkult_adm = ProjectDetailsAdmin(projekt=projekt, projekt_name=projekt_name r01=r01)
    szervkult_adm.save()

return render(request, 'stressz/project_details.html', context)

models.py

class ProjectDetailsAdmin(models.Model):

def __str__(self):
    return str(self.projekt_name)

     projekt = models.ForeignKey('Projekt', on_delete=models.CASCADE, default=False, null=True )
     projekt_name = models.TextField(max_length=200, null=True )
     r01 = models.IntegerField(null=True, blank=True, default=0)


class Projekt(models.Model):

    def __str__(self):
        return str(self.projekt)

    projekt = models.TextField(max_length=150)

html

<div class="container bg-warning my-3">Válaszd ki projektet:
  <select class="form-select" id="projekt" name="projekt" aria-label="">
    {% for i in allprojects %}
      <option>{{ i.id }}</option>
    {% endfor %}
  </select>
</div>

非常感谢您!

【问题讨论】:

    标签: python django valueerror


    【解决方案1】:

    projekt 是一个包含数字的字符串,而不是 Projekt 模型对象,这是必需的。

    但是,您可以分配给 projekt_id 字段:

    if request.method == 'POST':
        projekt = request.POST.get('projekt')
        projekt_name = request.POST.get('projekt_name')
        r01 = request.POST.get('r01') 
        
        szervkult_adm = ProjectDetailsAdmin.objects.create(
            projekt_id=projekt,
            projekt_name=projekt_name,
            r01=r01
        )

    如果您创建了一个名为 fooForeignKey,那么您可以通过 foo<i>foo</i>_id 与该字段“交谈”,其中 @987654329 @ 取 ForeignKey 所引用的列的值。

    【讨论】:

      【解决方案2】:
      if request.method == 'POST':
          projekt = request.POST.get('projekt')
          projekt_name = request.POST.get('projekt_name')
          r01 = request.POST.get('r01') 
      
          szervkult_adm = ProjectDetailsAdmin(projekt_id=projekt, 
          projekt_name=projekt_name r01=r01)
          szervkult_adm.save()
      

      每当您更新或创建表中包含外键的任何内容时,您都需要传递主键对象,或者您可以像 projekt_id=projekt 一样直接分配主键。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-13
        • 2021-11-22
        • 1970-01-01
        • 1970-01-01
        • 2021-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多