2016-10-23 39 views
1

Django文檔在使用ModelForm時不清楚。首先,我如何設置我的urls.py?Django 1.10 AdminDateWidget()在ModelForm中使用

我只是這樣做:

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

在我的意見,我嘗試使用AdminDateWidget:

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'] 

我的模板是:

{% 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 %} 

我在這裏的鬥爭我在渲染頁面時出現此錯誤:

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

但根據https://docs.djangoproject.com/en/1.10/topics/forms/modelforms/文檔,DateField是允許的數據類型之一。所以我顯然做錯了,但不知道如何做對。有人可以幫我解決這個問題嗎?如果可能的話,我傾向於選擇研究的例子。

回答

2

一目瞭然,似乎還有很多問題(模板沒有表單標籤,字段只能接受字符串等)但最重要的是那些想使用AdminDateWidget:有一些額外的您需要加載的腳本不包含在通常的{{form.media}}中。

項目/ 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'), 
] 

相冊/ 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'] 

相冊/ 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}) 

相冊/模板/專輯/ 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> 

我希望這可以幫助別人!

+0

你真的配得上投票... – CrazyGeek