如何修复"无法通过 Weekstaat 实例访问管理器"?



我正在尝试将状态更改为"ingedient"。当我单击"indienen"按钮时,会出现此错误:管理器无法通过 Weekstaat 实例访问。如何修复此错误?------------

这是我的索引.html

<form action="{% url 'weekstaat-indienen' Weekstaat.id  %}" method=POST>
                       {% csrf_token %}
                      <button id="approve-btn" type="submit">Approve</button>
                     </form>
                  </td>
                  <td class="text-center">
                      <button type="button" class="read-Contract btn btn-sm btn-primary" data-id="{% url 'read_Weekstaat' Weekstaat.id %}">
                        <span class="fa fa-eye"></span>
                      </button>
                      <button type="button" class="update-Contract btn btn-sm btn-primary" data-id="{% url 'update_Weekstaat' Weekstaat.id %}">
                        <span class="fa fa-pencil"></span>
                      </button>
                  </td>
                  </tr>
                  {% endfor %}
                </tbody>
              </table>
            {% else %}
              <p class="text-primary">U heeft nog geen Weekstaat</p>
            {% endif %}
          </div>
        </div>
      </div>
    </div>
  </div>
  <script type="text/javascript">
    function bevestigIndienen(){
        if(confirm('U staat op het punt een weekstaat in te dienen. Weet u het zeker?') != true){
            document.getElementById('formulierIndienen').action = '';
            window.location.href = "{% url 'home' %}";
        }
    }

这是我的 view.py

def indienen(request, id):
    global Weekstaat
    Weekstaat = Weekstaat.objects.get(pk=id)
    Weekstaat.Status = 'Ingedient'
    Weekstaat.save()
    return redirect('../../weekstaat')

这是我的 model.py

class Weekstaat(models.Model):
    id = models.AutoField(primary_key=True, null=False, blank=False)
    status = models.CharField(max_length=11, choices=STATUS_CHOICES, default='Niet ingediend',)
    jaar = models.ForeignKey(Jaar, default=datetime.now().year, null=False, blank=False,on_delete=models.CASCADE)
    week = models.ForeignKey(Week, default=date.today().isocalendar()[1], null=False, blank=False,on_delete=models.CASCADE)
    werknemer = models.ForeignKey(User, related_name='weekstaat_werknemer', null=False, blank=False, default=1,on_delete=models.CASCADE)
    maandag = models.FloatField(null=True, blank=True, default=0)
    dinsdag = models.FloatField(null=True, blank=True, default=0)
    woensdag = models.FloatField(null=True, blank=True, default=0)
    donderdag = models.FloatField(null=True, blank=True, default=0)
    vrijdag = models.FloatField(null=True, blank=True, default=0)
    zaterdag = models.FloatField(null=True, blank=True, default=0)
    zondag = models.FloatField(null=True, blank=True, default=0)
    def __str__(self):
        return str(self.jaar) + ' week ' + str(self.week) + str(self.werknemer) + str(self.status)

这是我的 urls.py

urlpatterns = [
            path('', views.Index.as_view(), name='indexs'),
            path('create/', views.WeekstaatCreateView.as_view(), name='create_Weekstaat'),
            path('update/<int:pk>', views.WeekstaatUpdateView.as_view(), name='update_Weekstaat'),
            path('read/<int:pk>', views.WeekstaatReadView.as_view(), name='read_Weekstaat'),
            path('delete/<int:pk>', views.WeekstaatDeleteView.as_view(), name='delete_Weekstaat'),
            path('indienen/<int:id>', views.indienen, name='weekstaat-indienen'),
        ]

在函数indienen中,您可以使用Weekstaat实例覆盖全局变量Weekstaat

def indienen(request, id):
    global Weekstaat
    Weekstaat = Weekstaat.objects.get(pk=id)
    ...

第二次运行此方法时,您尝试通过实例获取管理器。这是不可能的,因此出现错误消息。尝试改用其他变量名称:

def indienen(request, id):
    global Weekstaat
    weekstaat = Weekstaat.objects.get(pk=id)  # notice  lowercase w
    weekstaat.Status = 'Ingedient'
    weekstaat.save()
    return redirect('../../weekstaat')

你的代码似乎不合适。更改您的视图,如下所示,

def indienen(request, id):
    weekstaat_instance = Weekstaat.objects.get(pk=id)
    weekstaat_instance.Status = 'Ingedient'
    weekstaat_instance.save()
    return redirect('../../weekstaat')

错误是由这里的拼写错误引起的Weekstaat.Status = 'Ingedient'应该Weekstaat.status = 'Ingedient' .注意:小写

最新更新