当我尝试在Django中使用DeleteView时,无法调用“ str”对象 [英] 'str' object is not callable when i try to use DeleteView in Django

查看:135
本文介绍了当我尝试在Django中使用DeleteView时,无法调用“ str”对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的文件

urls.py 为删除过程创建的URL路径

urls.py the URL paths I created for the delete process

path('dress/<int:pk>/delete', views.DressDelete.as_view(), name="dress_delete"),
path('dress/delete/confirm', views.dress_delete_confirm, name="dress_delete_confirm"),

views.py ,我在其中创建了要删除的视图,并在删除完成后通知用户

views.py where i created the view for delete and view that is going to appear after deleting is completed to inform the user

from django.urls import reverse_lazy
from django.views.generic import DeleteView

class DressDelete (DeleteView):
        model = Item
        success_url = reverse_lazy('dress_delete_confirm')

    @login_required
    def dress_delete_confirm(request):
        return render(request, 'fostania_web_app/dress_delete_confirm.html')

models.py 我要删除的表在哪里te from:

the models.py where is the table I'm trying to delete from :

class Item(models.Model):
    # custom validators
    alphanumeric = RegexValidator(r'^[0-9a-zA-Z]*$', 'Only alphanumeric characters are allowed.')

    # fields
    dress_name = models.ForeignKey(Name, on_delete='DO_NOTHING', blank=False, verbose_name='نوع الفستان',)
    dress_rate = models.ForeignKey(Rate, on_delete='DO_NOTHING', blank=False, verbose_name='تصنيف الفستان',)
    dress_size = models.ForeignKey(Size, on_delete='DO_NOTHING', verbose_name='مقاس الفستان', blank=False)
    dress_color = models.CharField(max_length=50, verbose_name='لون الفستان', blank=False)
    dress_image1 = models.ImageField(upload_to='documents/%Y/%m/%d', null=False, verbose_name='الصورة الأساسية للفستان',
                                     help_text='لا يمكنك تركها فارغة',blank=False)
    dress_image2 = models.ImageField(upload_to='documents/%Y/%m/%d', null=True, verbose_name='صورة إضافية ', blank=False)
    dress_image3 = models.ImageField(upload_to='documents/%Y/%m/%d', null=True, verbose_name='صورة إضافة ', blank=False)
    dress_action = models.ForeignKey(Action, on_delete='DO_NOTHING', verbose_name='الفستان معروض لل ',
                                     help_text='للبيع او للإيجار ', blank=False)
    dress_price = models.IntegerField(default=1, verbose_name='السعر', blank=False)
    dress_mobile = models.CharField(max_length=20, validators=[alphanumeric], verbose_name='رقم الهاتف ', blank=False)
    created_by = models.CharField(max_length=250,)
    created_username = models.CharField(max_length=250, default='unknown')
    created_at = models.DateTimeField(auto_now=True)
    dress_active = models.BooleanField(default=False)
    dress_special = models.BooleanField(default=False)
    dress_town = models.ForeignKey(Town, on_delete='DO_NOTHING', verbose_name='المحافظة', blank=False)

这是b其他 HTML 文件正在使用:

and here is the both HTML files am using :

item_confirm_delete.html

{% extends 'fostania_web_app/base.html' %}
{% block content %}
{% load static %}
<Br><br><br><br>
{% if request.user.email == object.created_username %}
<div class ="well well-small" align="center">
<!-- adsense -->
    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- fostania-item_confirm_delete-page -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4202417439740489"
     data-ad-slot="5176371539"
     data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
    <!-- end adsense -->
<form method="post">
    {% csrf_token %}
  <b>
    <p>هل انت متأكد من رغبتك فى مسح الفستان </p>
        </b>
    <br>
    <img src="{{ object.dress_image1.url }}" style="width: 250px;height: 250px;">
    <Br>
    <br>
    <input  class = "btn btn-danger" type="submit" value="تأكيد المسح" />
    <br><br>
</form>
    <a href="{% url 'home' %}"><button class="btn btn-success">رجوع للموقع</button></a>
    </div>
{% else %}
<div class ="well well-small" align="center">

    <b><font color="red">عفواً..لا يمكنك مسح فساتين مستخدمين غيرك</font></b><br><br>
<a href="{% url 'home' %}"><button class="btn-success">الرجوع للموقع</button></a>
</div>
      {% endif %}
    <!-- Placed at the end of the document so the pages load faster -->
{% endblock %}

dress_delete_confirm.html HTML删除后显示的页面

dress_delete_confirm.html the HTML page that appears after deleting

{% extends 'fostania_web_app/base.html' %}
{% block content %}
{% load static %}
    <br><br><Br><br>
    <div align="center">
<!-- adsnse -->
        <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- fostania-dress_delete_confirm-page -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4202417439740489"
     data-ad-slot="3991406089"
     data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
        <!-- end adsense -->
    <div class="card border-dark mb-3" style="max-width: 18rem;">
  <div class="card-header">تم مسح الفستان</div>
  <div class="card-body text-dark">
    <p class="card-text">

        <B>لقد تم مسح الفستان بنجاح</B>
        <br>
<a href="{% url 'home' %}"><button class="btn btn-success">موافــق</button></a>

    </p>
  </div>
</div>


    </div>
{% endblock %}

这是错误 traceback

'str'对象不可调用

Environment:


Request Method: POST
Request URL: https://fostania.herokuapp.com/dress/4/delete

Django Version: 2.0.5
Python Version: 3.6.4
Installed Applications:
['django_filters',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'fostania_web_app.apps.FostaniaWebAppConfig']
Installed Middleware:
('whitenoise.middleware.WhiteNoiseMiddleware',
 'whitenoise.middleware.WhiteNoiseMiddleware',
 'django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware')



Traceback:

File "/app/.heroku/python/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
  35.             response = get_response(request)

File "/app/.heroku/python/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
  128.                 response = self.process_exception_by_middleware(e, request)

File "/app/.heroku/python/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
  126.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/app/.heroku/python/lib/python3.6/site-packages/django/views/generic/base.py" in view
  69.             return self.dispatch(request, *args, **kwargs)

File "/app/.heroku/python/lib/python3.6/site-packages/django/views/generic/base.py" in dispatch
  89.         return handler(request, *args, **kwargs)

File "/app/.heroku/python/lib/python3.6/site-packages/django/views/generic/edit.py" in post
  218.         return self.delete(request, *args, **kwargs)

File "/app/.heroku/python/lib/python3.6/site-packages/django/views/generic/edit.py" in delete
  213.         self.object.delete()

File "/app/.heroku/python/lib/python3.6/site-packages/django/db/models/base.py" in delete
  890.         collector.collect([self], keep_parents=keep_parents)

File "/app/.heroku/python/lib/python3.6/site-packages/django/db/models/deletion.py" in collect
  222.                         field.remote_field.on_delete(self, field, sub_objs, self.using)

Exception Type: TypeError at /dress/4/delete
Exception Value: 'str' object is not callable


推荐答案

on_delete 参数应具有特定的值,而不是简单的字符串。您需要将外键更改为以下内容:

on_delete argument should has specific value, not simple strings. You need to change your foreign keys to the following:

dress_town = models.ForeignKey(Town, on_delete=models.DO_NOTHING, verbose_name='المحافظة', blank=False)

您需要使用模型。 DO_NOTHING 而不是 DO_NOTHING 字符串。

You need to use models.DO_NOTHING instead of DO_NOTHING string.

这篇关于当我尝试在Django中使用DeleteView时,无法调用“ str”对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆