2009-11-05 3 views
6

Ich habe das folgende Modell aufgebaut:: mit einem Imagefield für einen Modellfehler in Admin-Panel ‚getattr() Attribut Name muss String‘

class UserProfile(models.Model): 
    "Additional attributes for users." 
    url = models.URLField() 
    location = models.CharField(max_length=100) 
    user = models.ForeignKey(User, unique=True) 
    avatar = models.ImageField(upload_to='/home/something/www/avatars', height_field=80, width_field=80) 

    def __unicode__(self): 
     return "Profile of " + self.user.username 

es angenommen hat, zusätzliche Informationen über einen Benutzer zu speichern, für Beispiel ein Avatar.

Leider, wenn ich versuche, ein Bild über den Admin-Panel zu laden, es gibt mir einen Fehler, so etwas wie:

getattr(): attribute name must be string 

Was nicht erzeugt wird, wenn ich das Feld aus dem Modell entfernen, eine db tun Setzen Sie den Server zurück und laden Sie ihn neu. Ich könnte mir vorstellen, dass die Ursache in diesem speziellen Bereich liegt, nur nicht sicher wie.

File "/usr/lib/pymodules/python2.6/django/core/handlers/base.py" in get_response 
    92.     response = callback(request, *callback_args, **callback_kwargs) 
File "/usr/lib/pymodules/python2.6/django/contrib/admin/options.py" in wrapper 
    226.     return self.admin_site.admin_view(view)(*args, **kwargs) 
File "/usr/lib/pymodules/python2.6/django/views/decorators/cache.py" in _wrapped_view_func 
    44.   response = view_func(request, *args, **kwargs) 
File "/usr/lib/pymodules/python2.6/django/contrib/admin/sites.py" in inner 
    186.    return view(request, *args, **kwargs) 
File "/usr/lib/pymodules/python2.6/django/db/transaction.py" in _commit_on_success 
    240.     res = func(*args, **kw) 
File "/usr/lib/pymodules/python2.6/django/contrib/admin/options.py" in add_view 
    718.     new_object = self.save_form(request, form, change=False) 
File "/usr/lib/pymodules/python2.6/django/contrib/admin/options.py" in save_form 
    551.   return form.save(commit=False) 
File "/usr/lib/pymodules/python2.6/django/forms/models.py" in save 
    407.        fail_message, commit, exclude=self._meta.exclude) 
File "/usr/lib/pymodules/python2.6/django/forms/models.py" in save_instance 
    65.   f.save_form_data(instance, cleaned_data[f.name]) 
File "/usr/lib/pymodules/python2.6/django/db/models/fields/files.py" in save_form_data 
    283.    setattr(instance, self.name, data) 
File "/usr/lib/pymodules/python2.6/django/db/models/fields/files.py" in __set__ 
    316.    self.field.update_dimension_fields(instance, force=True) 
File "/usr/lib/pymodules/python2.6/django/db/models/fields/files.py" in update_dimension_fields 
    368.    (self.width_field and not getattr(instance, self.width_field)) 

Exception Type: TypeError at /admin/proj/userprofile/add/ 
Exception Value: getattr(): attribute name must be string 

Antwort

15

Ihr Problem ist mit height_field=80 und width_field=80 Diese sollten nicht die Höhe und Breite enthalten, die Sie benötigen, sondern die Namen der Felder in Ihrem Modell, in denen die Werte für Höhe und Breite gespeichert werden können.

Wie in der Django-Dokumentation für die ImagedField erläutert, sind dies Attribute in Ihrem Modell, die für Sie beim Speichern des Modells ausgefüllt werden. Wenn Sie diese Informationen für das Attribut create model angeben möchten, in dem diese Informationen gespeichert werden können, entfernen Sie einfach diese Attribute, die optional sind.

7

Das Problem ist wahrscheinlich das:

Das ist mein Zurückverfolgungs ist

height_field=80, width_field=80 

height_field und width_field, wenn Sie sie verwenden, sollen Namen von Feldern auf dem Modell sein, die enthalten die Höhe und Breite Informationen. Fix das sollte es funktionieren.

+0

Haben Sie gewählt, danke. – cwj

Verwandte Themen