2016-05-29 35 views
0

Ich benutze ColorField, die ich im Internet gefunden habe, und es funktioniert in Ordnung, wenn ich die Farbe von Admin-Seite einstellen, aber wenn ich mein eigenes Formular erstelle ich diesen Fehler : 'ColorField' Objekt hat kein Attribut 'Modell' Django

'ColorField' object has no attribute 'model' 

Er sagt: "Fehler bei der Vorlage Rendering", und zeigt, dass der Fehler in dieser Zeile ist:

class Event(models.Model): 
    name = models.CharField(blank = False, max_length = 100) 
    beggining_time= models.DateTimeField(blank = True) 
    ending_time = models.DateTimeField(blank = True) 
    color = ColorField(default='#FF0000') 
    manager = models.ForeignKey(Manager, on_delete=models.CASCADE) 
    slug = models.SlugField(unique = True) 
:

<div class="form-group form-group-lg"> 
    <label class="control-label" for="formGroupInputLarge">Color: </label> 
    {{ form.color }} 
</div> 

das ist mein models.py ist

Das ist meine views.py Datei:

def calendar(request, pYear, pMonth, id): 
    """ 
    Show calendar of events for specified month and year 
    """ 
    lYear = int(pYear) 
    lMonth = int(pMonth) 
    lContestEvents = Smena.objects.filter(manager= Manager.objects.filter(user= User.objects.filter(id = id))) 
    lCalendar = WorkoutCalendar(lContestEvents).formatmonth(lYear, lMonth) 
    lPreviousYear = lYear 
    lPreviousMonth = lMonth - 1 
    if lPreviousMonth == 0: 
     lPreviousMonth = 12 
     lPreviousYear = lYear - 1 
    lNextYear = lYear 
    lNextMonth = lMonth + 1 
    if lNextMonth == 13: 
     lNextMonth = 1 
     lNextYear = lYear + 1 
    lYearAfterThis = lYear + 1 
    lYearBeforeThis = lYear - 1 

    form = AddEvent(request.POST or None) 
    if form.is_valid(): 
     instance = form.save(commit = False) 
     instance.manager= Manager.objects.filter(user= User.objects.filter(id = id)) 
     instance.save() 

    return render(request, 'template.html', {'Calendar' : mark_safe(lCalendar), 
                 'Month' : lMonth, 
                 'MonthName' : named_month(lMonth), 
                 'Year' : lYear, 
                 'PreviousMonth' : lPreviousMonth, 
                 'PreviousMonthName' : named_month(lPreviousMonth), 
                 'PreviousYear' : lPreviousYear, 
                 'NextMonth' : lNextMonth, 
                 'NextMonthName' : named_month(lNextMonth), 
                 'NextYear' : lNextYear, 
                 'YearBeforeThis' : lYearBeforeThis, 
                 'YearAfterThis' : lYearAfterThis, 
                 'form' : form, 
                }) 

Das ist meine forms.py Datei:

class AddEvent(forms.Form): 

    name= forms.CharField() 
    beggining_time= forms.DateTimeField() 
    ending_time= forms.DateTimeField() 
    color = ColorField() 

    class Meta: 
     fields = ['name', 'beggining_time', 'ending_time', 'color'] 

Wie gesagt, ich Ereignisse von Admin-Seite hinzufügen kann, aber ich kann das Formular nicht angezeigt auf meiner Website. Ich bekomme den erwähnten Fehler. Danke für Ihre Hilfe.

+0

Woher kommt das 'ColorField'? So etwas gibt es im Django nicht. – Anonymous

+0

Gefunden hier: https://github.com/jaredly/django-colorfield – P3P5

Antwort

1

Sie verwenden das ModellColorField in Ihrer Form, aber das sind zwei völlig unterschiedliche Kontexte. Es sieht auch so aus, als ob Sie versuchen, ein normales Formular als ModelForm zu verwenden.

Introduction to ModelForms.

Ihre Form ändern wie folgt aussehen:

class EventForm(forms.ModelForm): 
    class Meta: 
     model = Event 
     fields = ['name', 'beggining_time', 'ending_time', 'color'] 

Dieses automatisch das Widget ColorWidgetForm Feld verwenden, wird beim Rendern.

+0

Ja, es funktioniert, aber das Feld wird nicht angezeigt, wie es auf der Admin-Seite ist ... Auf Admin-Seite kann ich Farbe wählen, die ich will, und jetzt kann ich nur manuelle Farbe eingeben, die ich will, zum Beispiel # ff0000, und ich kann nicht sehen, welche Farbe das ist – P3P5

+1

Es sollte das gleiche Widget wie der Admin verwenden. Könnte ein Problem sein, dass JavaScript nicht geladen wird. Überprüfen Sie zunächst, ob [diese Vorlage] (https://github.com/jaredly/django-colorfield/blob/master/colorfield/templates/colorfield/color.html) auf der Seite verwendet wird. Wenn dies der Fall ist, debuggen Sie die statischen Dateien ("jscolor.js" muss geladen sein). – Anonymous

+0

Tank Sie, es hat funktioniert. Ich habe gerade jscolor.js Datei geladen und es funktioniert gut. – P3P5

Verwandte Themen