2016-10-23 8 views
1

Die Django-Dokumente sind bei der Verwendung von ModelForm nicht eindeutig. Erstens, wie richte ich meine urls.py ein?10 Django 1.10 AdminDateWidget() Verwendung in ModelForm

ich dies einfach tun:

from . import views as music_views 
url(r'album/add/$', music_views.AlbumCreate(), name='album-add'), 

In meinen Ansichten Ich versuche, die AdminDateWidget zu verwenden:

from . import models as music_models 
from django import forms 
from django.contrib.admin.widgets import AdminDateWidget 
class AlbumCreate(forms.ModelForm): 
    class Meta: 
     releasedate = forms.DateField(widget=AdminDateWidget()) 
     model = music_models.Album 
     fields = ['artist', 'album_title', 'genre', releasedate, 'notes', 'album_logo', 'rating'] 

Meine Vorlage ist:

{% for field in form %} 
    <div class="form-group"> 
     <div class="col-sm-offset-2 col-sm-10"> 
      <span class="text-danger small">{{ field.errors }}</span> 
     </div> 
     <label class="control-label col-sm-2"> 
      {{ field.label_tag }} 
     </label> 
     <div class="col-sm-10"> 
      {{ field }} 
     </div> 
    </div> 
{% endfor %} 

Mein Kampf hier ist dass ich diesen Fehler beim Rendern der Seite erhalte:

Exception Value:  
sequence item 0: expected str instance, DateField found 

Aber gemäß den https://docs.djangoproject.com/en/1.10/topics/forms/modelforms/ Dokumenten ist DateField einer der zulässigen Datentypen. So mache ich es offensichtlich irgendwie falsch, weiß aber nicht, wie ich es richtig machen soll. Kann mir jemand dabei helfen? Ich tendiere dazu, wenn möglich, grundlegende Beispiele zu studieren.

Antwort

2

Auf einen Blick scheint es, gibt es viele Probleme gibt (keine Form Tags in Vorlage können Felder nur Strings akzeptieren, etc.) Aber am wichtigsten für diejenigen verwenden AdminDateWidget: Es gibt eine Reihe von zusätzlichen sind Skripte, die Sie laden müssen, sind NICHT im üblichen {{form.media}} enthalten.

Projekt/urls.py

from django.conf.urls import include, url 
from album.views import album_add 


urlpatterns = [ 
    url(r'album/add/$', album_add, name='album-add'), 
] 

Album/models.py

from django import forms 
from django.db import models 
from django.contrib.admin.widgets import AdminDateWidget 


class Album(models.Model): 
    artist = models.CharField(max_length=30) 
    releasedate = models.DateField() 


class AlbumForm(forms.ModelForm): 
    releasedate = forms.DateField(widget=AdminDateWidget) 

    class Meta: 
     model = Album 
     fields = ['artist', 'releasedate'] 

Album/views.py

from .models import AlbumForm 
from django.shortcuts import render, HttpResponse 


def album_add(request): 
    if request.method == "GET": 
     form = AlbumForm() 
     return render(request, 'album/create_album.html', {'form': form}) 
    elif request.method == "POST": 
     form = AlbumForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      return HttpResponse("Saved.") 
     return render(request, 'album/create_album.html', {'form': form}) 

Album/templates/Album/create_album.html

{% load static %} 

<script type="text/javascript" src="/admin/jsi18n/"></script> 
<script type="text/javascript" src="{% static 'admin/js/core.js' %}"></script> 
<script type="text/javascript" src="{% static 'admin/js/vendor/jquery/jquery.js' %}"></script> 
<script type="text/javascript" src="{% static 'admin/js/jquery.init.js' %}"></script> 

{{ form.media }} 

<link rel="stylesheet" type="text/css" href="{% static 'admin/css/base.css' %}" /> 
<link rel="stylesheet" type="text/css" href="{% static 'admin/css/widgets.css' %}" /> 

<form> 
    {% csrf_token %} 
    <table> 
    {{ form }} 
    </table> 
    <input type="submit" value="Go!"> 
</form> 

ich dies jemand hilft Hoffnung!

+0

Sie verdienen wirklich Vote UP ... – CrazyGeek