2017-08-02 2 views
0

Löschen Ich habe einen seltsamen Fehler:Admin Fehler Django während

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

Ich habe ein Modell Artikel. Ich versuche gerade einige Artikel meiner Datenbank aus dem Admin-Panel von Django zu löschen. Ich sagte, es ist merkwürdig, weil es nur bei einigen Objekten passiert. Ich kann die meisten Artikel entfernen, aber aus irgendeinem Grund geben einige Einträge in der Datenbank einen Fehler zurück, wenn ich sie lösche. Für meine anderen Modelle ist das nicht der Fall.

Dies ist ein Screenshot von phpMyAdmin alle Einträge in meiner Tabelle „Artikel“ zeigt:

enter image description here

Zum Beispiel habe ich einen Eintrag mit der ID 70. Im Pannel Django Admin ich nicht löschen kann Ich habe einen Fehler. Zum Testen erstellen Sie den genauen Eintrag (siehe ID 75) und ich kann diesen Eintrag aus dem Django Admin Pannel löschen.

Warum konnte ich einige Inhalte löschen, aber nicht alle?

Das ist mein 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) 

Das ist mein 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) 

Dies ist der Zurückverfolgungs meiner Fehlerseite, und vielen Dank für Ihre Hilfe:

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

Haben Sie weitere Modelle mit Fremdschlüsseln, die auf Artikel zeigen? Bitte poste sie wenn ja. –

+0

Ja, ich aktualisiere meinen Beitrag. Das ist meine gesamte models.py-Datei – GrandGTO

Antwort

2

Das Problem ist in Ihrem Like-Modell. Wie der Fehler sagt, gibt die __str__-Methode für diesen Artikel keine Zeichenfolge, sondern eine Instanz von Artikeln zurück. Sie sollten sicherstellen, dass Sie tatsächlich eine Zeichenfolge zurückgeben, z. B. self.articles.title.

Der Grund dafür ist ein Problem beim Löschen, weil das Löschen eines Artikels auch alle Objekte löscht, die auf ihn zeigen, und Django zeigt alle betroffenen Objekte auf der Bestätigungsseite an.

Beachten Sie, dass Ihre Namenskonventionen verwirrend sind. Sie sollten sich an einzelne Namen für Ihre Modelle halten: Artikel, Kommentar.

+0

Ok, ich sehe, ich möchte Artikel zurückgeben, aber es ist keine Zeichenfolge. Ich habe versucht, article.title zurückzugeben und so funktioniert es jetzt! Danke für Ihre Ratschläge. – GrandGTO