Django, требующий необязательной ошибки поля формы - PullRequest
0 голосов
/ 26 мая 2018

Для новых читателей: решение Neverwalkaloner решило первоначальную ошибку, но загрузка фотографий по-прежнему требуется, и создание требуемого значения false в forms.py дает мне MultiValueDictKeyError.Буду очень признателен за любую помощь в том, чтобы сделать его необязательным.


У меня есть модель и форма для загрузки либо рисунка и текста, либо просто текста.На самом деле я намеревался сделать выбор между изображением, текстом или обоими, и любая помощь с этим была бы признательна, но я отступаю.Загрузка работает только когда изображение включено, если это просто текст, я получаю сообщение об ошибке:

The view lesyeux.views.posts didn't return an HttpResponse object. It 
returned None instead.The view lesyeux

Моя модель:

class Post(models.Model):
    image = models.ImageField(upload_to='uploaded_images', blank=True, 
    null=True)
    text_post = models.CharField(max_length=1000)
    author = models.ForeignKey(User)

Моя форма:

class PostForm(forms.ModelForm):
    image = forms.FileField(label='Select an image file', 
    help_text='Please select a photo to upload')
    text_post = forms.CharField(help_text="Please enter some text.") 
    class Meta:
        model = Post
        fields = ('image', 'text_post',)
        exclude = ('author',)

На мой взгляд:

def posts(request, id=None):
    neighborhood = get_object_or_404(Neighborhood, id=id)
    form = PostForm()
    if request.method == 'POST':
        form = PostForm(request.POST, request.FILES)
        if form.is_valid():
            post = Post(image = request.FILES['image'])
            post = form.save(commit=False)
            post.author = request.user
            post = post.save()
            next = request.POST.get('next', '/')
            return HttpResponseRedirect(next)
    else:
        form = PostForm()
        posts = Post.objects.all().order_by('-id')
        return render(request, 'posts.html', context = {'form':form, 
        'posts':posts, 'neighborhood':neighborhood})

и моя форма:

    <form id="PostForm" method="post" action="/view/{{ neighborhood.id }}/posts/" enctype="multipart/form-data">

        {% csrf_token %}
        {% for hidden in form.hidden_fields %}
            {{ hidden }}
        {% endfor %}

        {% for field in form.visible_fields %}
            {{ field.errors }}
            {{ field.help_text }}
            {{ field }}
        {% endfor %}
        <input type="hidden" name="next" value="{{ request.path }}">
        <input type="submit" name="submit" value="Post" />
    </form>    

1 Ответ

0 голосов
/ 26 мая 2018

Ваше мнение не возвращает ответ, если форма недействительна.Чтобы исправить это переписать вид так:

def posts(request, id=None):
    neighborhood = get_object_or_404(Neighborhood, id=id)
    form = PostForm()
    if request.method == 'POST':
        form = PostForm(request.POST, request.FILES)
        if form.is_valid():
            post = Post(image = request.FILES['image'])
            post = form.save(commit=False)
            post.author = request.user
            post = post.save()
            next = request.POST.get('next', '/')
            return HttpResponseRedirect(next)
    else:
        form = PostForm()  
    posts = Post.objects.all().order_by('-id')          
    return render(request, 'posts.html', context = {'form':form, 'posts':posts, 'neighborhood':neighborhood})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...