Django上传表单试图清理未定义的小部件?

Alv*_*vin 1 django-forms

获取此表单的呈现错误:

"NoneType"对象没有属性"插件" http://dpaste.com/88585/

有任何想法吗?

视图

def your_photos_upload(request):
    if request.method == 'POST':
        form = MemorialUserPhotosForm(request.FILES)
        if form.is_valid():
Run Code Online (Sandbox Code Playgroud)

形成

class MemorialUserPhotosForm(ModelForm):
    image = forms.ImageField(label="Select an image to upload.",  error_messages={'missing' : 'No image selected',  'invalid' : 'Please select an image',  'invalid_image' : 'Not a valid image file'})

    class Meta:
        model=MemorialUserPhotos

        fields=('image')
Run Code Online (Sandbox Code Playgroud)

HTML

<form enctype="multipart/form-data" method="post" action="{{ processor }}">
<li><label for="id_image">Select an image to upload.</label> <input type="file" id="id_image" name="image"/></li>
<input type="hidden" name="sessionid" value="7e4b4626c6ae1021ba0bae7969bfdd14">
<input type="submit">
</form>
Run Code Online (Sandbox Code Playgroud)

楷模

class MemorialUserPhotos(Photo):
    user = models.ForeignKey(User)
    modified = models.DateTimeField(auto_now=True)
    class Meta:
        db_table = u'memorial_user_photos'
        verbose_name = 'User Uploaded Photo'
        verbose_name_plural = 'User Uploaded Photo'
        ordering = ['user']
        get_latest_by = 'modified'

    def save(self):
        self.is_public = False
        if self.title is None:
            self.image.name
        if self.title_slug is None:
            self.title_slug = slugify(self.title)
        super(MemorialUserPhotos, self).save()
        gallery = Gallery.objects.get(id=settings.USER_GALLERY)
        gallery.photos.add(self)


class Photo(ImageModel):
    title = models.CharField(_('title'), max_length=100, unique=True)
    title_slug = models.SlugField(_('slug'), unique=True,
                                  help_text=('A "slug" is a unique URL-friendly title for an object.'))
    caption = models.TextField(_('caption'), blank=True)
    date_added = models.DateTimeField(_('date added'), default=datetime.now, editable=False)
    is_public = models.BooleanField(_('is public'), default=True, help_text=_('Public photographs will be displayed in the default views.'))
    tags = TagField(help_text=tagfield_help_text, verbose_name=_('tags'))



class ImageModel(models.Model):
    image = models.ImageField(_('image'), max_length=IMAGE_FIELD_MAX_LENGTH, 
                              upload_to=get_storage_path)
    date_taken = models.DateTimeField(_('date taken'), null=True, blank=True, editable=False)
    view_count = models.PositiveIntegerField(default=0, editable=False)
    crop_from = models.CharField(_('crop from'), blank=True, max_length=10, default='center', choices=CROP_ANCHOR_CHOICES)
    effect = models.ForeignKey('PhotoEffect', null=True, blank=True, related_name="%(class)s_related", verbose_name=_('effect'))
Run Code Online (Sandbox Code Playgroud)

vin*_*ent 5

不,这是一个经典的python陷阱:

fields=('image')
Run Code Online (Sandbox Code Playgroud)

'image' 不是一个元组,它只是一个带括号的字符串.猜猜会发生什么,框架会尝试迭代你的字符串而不是迭代元组('i','m','a','g','e').

只有一个元素的有效元组用另外一个逗号写入:

 fields=('image',)
Run Code Online (Sandbox Code Playgroud)