2017-08-02 87 views
0

我有一个奇怪的错误:Django管理错误而删除

TypeError at /admin/wall/articles/ 
__str__ returned non-string (type Articles) 

我有一个模型文章。 我只是试图从Django的管理面板中删除我的数据库的一些文章。我说它很好奇,因为它只发生在一些物体上。我可以删除大部分文章,但由于某些原因,如果我删除它们,数据库中的某些条目会返回错误。这不适用于我的其他模型。

这是phpMyAdmin的显示在我的桌子“公司章程”的所有条目的截图:

enter image description here

例如,我有ID 70条目在Django管理潘内尔我无法删除它,我有一个错误。为了测试重新创建确切的条目(请参阅ID 75),我可以从django admin pannel中删除此条目。

为什么我可以删除一些内容但不是全部?

这是我的models.py:

from django.db import models 
from start.models import Games 
from django.contrib.auth.models import User 
from tinymce.models import HTMLField 

# Create your models here. 

def user_directory_path_articles(instance, filename): 
    return 'media/user/user_{0}/articles/{1}/'.format(instance.user.id, filename) 

def user_directory_path_comments(instance, filename): 
    return 'media/user/user_{0}/comments/{1}/'.format(instance.user.id, filename) 

def validate_file_extension(value): 
    import os 
    from django.core.exceptions import ValidationError 
    ext = os.path.splitext(value.name)[1] # [0] returns path+filename 
    valid_extensions = ['.jpg', '.png'] 
    if not ext.lower() in valid_extensions: 
     raise ValidationError(u'Merci d\'utiliser le format JPG ou PNG') 

class Articles(models.Model): 
    title = models.CharField(max_length=50, null=False, verbose_name="Titre") 
    text = HTMLField() 
    image = models.FileField(upload_to='media/articles/', validators=[validate_file_extension], blank=True, null=True, verbose_name="Image de présentation") 
    games = models.ForeignKey(Games, verbose_name="Jeux", blank=True, null=True) 
    author = models.ForeignKey(User, verbose_name="Auteur") 
    is_statut = models.BooleanField(default=True, verbose_name="Statut") 
    date = models.DateTimeField(auto_now_add=True, auto_now=False, verbose_name="Date de création") 
    update = models.DateTimeField(auto_now=True, verbose_name="Dernière modification") 

    def __str__(self): 
     return self.title 

class Comments(models.Model): 
    text = models.CharField(max_length=300, null=False) 
    image = models.FileField(upload_to=user_directory_path_comments, validators=[validate_file_extension], blank=True, null=True) 
    articles = models.ForeignKey(Articles, verbose_name="Article", null=False, related_name='comments') 
    author = models.ForeignKey(User, verbose_name="Auteur") 
    in_answer_to = models.ForeignKey('self', verbose_name="En réponse au commentaire", blank=True, null=True, on_delete=models.CASCADE) 
    date = models.DateTimeField(auto_now_add=True, auto_now=False, verbose_name="Date de création") 
    update = models.DateTimeField(auto_now=True, verbose_name="Dernière modification") 

    def __str__(self): 
     return self.text 

class Like(models.Model): 
    articles = models.ForeignKey(Articles, verbose_name="Article", null=True, blank=True) 
    user = models.ForeignKey(User, verbose_name="Auteur", null=False) 

    def __str__(self): 
     return self.articles 

class Up(models.Model): 
    comments = models.ForeignKey(Comments, verbose_name="Commentaire", null=True, blank=True) 
    user = models.ForeignKey(User, verbose_name="Auteur", null=False) 

这是我的admin.py:

from django.contrib import admin 
from .models import Articles, Comments 

# Register your models here. 

class ArticlesAdmin(admin.ModelAdmin): 
    list_display = ('date', 'title', 'author', 'games', 'is_statut', 'update') 


    fieldsets = (
     ('Général', { 
      'fields': ('title', 'author', 'is_statut') 
      }), 
     ('Choisir une image de présentation', { 
      'fields': ('image',)}),  
     ('Contenu de l\'article', { 
      'fields': ('text',)}), 
     ('En rapport avec le jeu :', { 
      'fields': ('games',)}), 
    ) 
admin.site.register(Articles, ArticlesAdmin) 

这是我的错误页面的追踪,并感谢您的帮助:

Environment: 


Request Method: POST 
Request URL: http://*******:8000/admin/wall/articles/ 

Django Version: 1.11.2 
Python Version: 3.5.3 
Installed Applications: 
['django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'widget_tweaks', 
'tinymce', 
'start', 
'myaccount', 
'wall'] 
Installed Middleware: 
['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 "/usr/local/lib/python3.5/dist-packages/django/core/handlers/exception.py" in inner 
    41.    response = get_response(request) 

File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py" in _get_response 
    187.     response = self.process_exception_by_middleware(e, request) 

File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py" in _get_response 
    185.     response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "/usr/local/lib/python3.5/dist-packages/django/contrib/admin/options.py" in wrapper 
    551.     return self.admin_site.admin_view(view)(*args, **kwargs) 

File "/usr/local/lib/python3.5/dist-packages/django/utils/decorators.py" in _wrapped_view 
    149.      response = view_func(request, *args, **kwargs) 

File "/usr/local/lib/python3.5/dist-packages/django/views/decorators/cache.py" in _wrapped_view_func 
    57.   response = view_func(request, *args, **kwargs) 

File "/usr/local/lib/python3.5/dist-packages/django/contrib/admin/sites.py" in inner 
    224.    return view(request, *args, **kwargs) 

File "/usr/local/lib/python3.5/dist-packages/django/utils/decorators.py" in _wrapper 
    67.    return bound_func(*args, **kwargs) 

File "/usr/local/lib/python3.5/dist-packages/django/utils/decorators.py" in _wrapped_view 
    149.      response = view_func(request, *args, **kwargs) 

File "/usr/local/lib/python3.5/dist-packages/django/utils/decorators.py" in bound_func 
    63.     return func.__get__(self, type(self))(*args2, **kwargs2) 

File "/usr/local/lib/python3.5/dist-packages/django/contrib/admin/options.py" in changelist_view 
    1568.     response = self.response_action(request, queryset=cl.get_queryset(request)) 

File "/usr/local/lib/python3.5/dist-packages/django/contrib/admin/options.py" in response_action 
    1286.    response = func(self, request, queryset) 

File "/usr/local/lib/python3.5/dist-packages/django/contrib/admin/actions.py" in delete_selected 
    37.   queryset, opts, request.user, modeladmin.admin_site, using) 

File "/usr/local/lib/python3.5/dist-packages/django/contrib/admin/utils.py" in get_deleted_objects 
    172.  to_delete = collector.nested(format_callback) 

File "/usr/local/lib/python3.5/dist-packages/django/contrib/admin/utils.py" in nested 
    232.    roots.extend(self._nested(root, seen, format_callback)) 

File "/usr/local/lib/python3.5/dist-packages/django/contrib/admin/utils.py" in _nested 
    216.    children.extend(self._nested(child, seen, format_callback)) 

File "/usr/local/lib/python3.5/dist-packages/django/contrib/admin/utils.py" in _nested 
    218.    ret = [format_callback(obj)] 

File "/usr/local/lib/python3.5/dist-packages/django/contrib/admin/utils.py" in format_callback 
    145.         force_text(obj)) 

File "/usr/local/lib/python3.5/dist-packages/django/utils/encoding.py" in force_text 
    76.      s = six.text_type(s) 

Exception Type: TypeError at /admin/wall/articles/ 
Exception Value: __str__ returned non-string (type Articles) 
+0

你有没有其他模型的外键指向文章?如果是这样,请发布。 –

+0

是的,我更新了我的帖子。这是我的整个models.py文件 – GrandGTO

回答

2

问题出在您的Like模型中。如错误所述,该文章的__str__方法不返回字符串,而是返回Articles的实例。你应该确定实际返回一个字符串,例如self.articles.title

这是删除问题的原因是因为删除文章也会删除所有指向它的对象,并且Django会在确认页面中帮助显示所有受影响的对象。

请注意,您的命名约定很混乱。你应该坚持为你的模型单名:文章,评论。

+0

好吧,我看到,我要求返回文章,但它不是一个字符串。我试图返回article.title,所以它现在工作!感谢您的建议。 – GrandGTO