2016-05-05 5 views
0

Ich versuche, ein Profil bearbeiten Formular bearbeiten und ich möchte die Standardeingabewerte die aktuellen Benutzerdaten sein. Zum Beispiel im Feld Benutzername wird der Standardwert der aktuelle Benutzer Benutzername. Also habe ich ein Modell Form und ich habe versucht dies:Django erkennt Benutzer nicht als Attribut in ModelForm

from __future__ import unicode_literals 

from django import forms 
from django.forms import ModelForm, Textarea 
from django.db import models 
from django.contrib.auth.models import User 

class User_Edit(forms.ModelForm): 
    class Meta: 
     model = User 
     fields = ['username', 'email'] 
     widgets = { 
      'username': Textarea(attrs={'value': model.username }) 
     } 

Aber Django sagt: Attribute: Typ Objekt ‚User‘ hat kein Attribut ‚username‘

Auch dies ist die vollständige Traceback:

Traceback (most recent call last): 
File "/home/sebastian/Spartan/local/lib/python2.7/site-packages/django/utils/autoreload.py", line 226, in wrapper 
fn(*args, **kwargs) 
File "/home/sebastian/Spartan/local/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 109, in inner_run 
autoreload.raise_last_exception() 
File "/home/sebastian/Spartan/local/lib/python2.7/site-packages/django/utils/autoreload.py", line 249, in raise_last_exception 
six.reraise(*_exception) 
File "/home/sebastian/Spartan/local/lib/python2.7/site-packages/django/utils/autoreload.py", line 226, in wrapper 
fn(*args, **kwargs) 
File "/home/sebastian/Spartan/local/lib/python2.7/site-packages/django/__init__.py", line 18, in setup 
apps.populate(settings.INSTALLED_APPS) 
File "/home/sebastian/Spartan/local/lib/python2.7/site-packages/django/apps/registry.py", line 108, in populate 
app_config.import_models(all_models) 
File "/home/sebastian/Spartan/local/lib/python2.7/site-packages/django/apps/config.py", line 202, in import_models 
self.models_module = import_module(models_module_name) 
File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module 
__import__(name) 
File "/home/sebastian/Documents/project-spartan/profiles/models.py", line 8, in <module> 
class User_Edit(forms.ModelForm): 
File "/home/sebastian/Documents/project-spartan/profiles/models.py", line 9, in User_Edit 
class Meta: 
File "/home/sebastian/Documents/project-spartan/profiles/models.py", line 13, in Meta 
'username': Textarea(attrs={'value': model.username }) 

Attribute: Typ Objekt ‚User‘ hat kein Attribut ‚username‘

+1

Nun, der _class_ 'User' hat kein' username' Attribut. Warum müssen Sie trotzdem einen expliziten Wert hinzufügen? Es sollte von der Modellform behandelt werden. – knbk

+0

Was meinst du? Kannst du mir ein Beispiel geben? –

Antwort

1

Grundsätzlich sollten Sie nicht den Wert jedes Feld in der Meta-Klasse einstellen werden. Sie können ein Formular initialisieren from an object den Benutzer darstellt, die Sie suchen, so in der Ansicht, die Sie haben würden:

#Whatever happens in your view function before you create the form 

user_obj = User.objects.get(username = target_username, 
    email=target_email) #Or how ever else you want to get the user in question 
form = User_EditForm(instance = user_obj) 

#Rest of your view 

Um Ihnen das Leben zu erleichtern, können Sie bei Verwendung des UpdateView stattdessen aussehen wollen, je nach Ihr genauer Anwendungsfall.

Verwandte Themen