2016-01-25 3 views
0

У меня возникли проблемы с (модель) формой, состоящей всего из одной кнопки. Когда я пытаюсь отправить форму, это сообщение отображается:Django ModelForm; Пользователь, это поле обязательно

пользователь Это поле обязательно для заполнения.

ModelForm выглядит следующим образом:

from django.forms import ModelForm 
from .models import HulpOproep 


class HulpOproepForm(ModelForm): 
    class Meta: 
     model = HulpOproep 
     fields = ['user', ] 

Модель выглядит следующим образом:

class HulpOproep(models.Model): 
    user = models.ForeignKey(User) 

    time = models.DateTimeField(auto_now_add=True, verbose_name='Tijd') 

    def __str__(self): 
     return '%s %s' % (self.user.username, str(self.time)) 

    def username(self): 
     return self.user.username 

    def first_name(self): 
     return self.user.first_name 

    def last_name(self): 
     return self.user.last_name 

    class Meta: 
     verbose_name = 'Hulp Oproep' 
     verbose_name_plural = 'Hulp Oproepen' 

The View выглядит следующим образом:

def verzend_oproep(request): 
    if request.method == 'POST': 
     form = HulpOproepForm(request.POST) 
     if form.is_valid(): 
      oproep = form.save(commit=False) 
      oproep.user = request.user 
      oproep.save() 
      return redirect('portal/index/') 
    else: 
     form = HulpOproepForm() 
    return render(request, 'portal/verzend_oproep.html', {'form': form}) 

Шаблон:

{% extends "base.html" %} 
{% block head %} 
    <title>Zorggroep | Hulp Oproep</title> 
{% endblock %} 

{% block body%} 
    <h1>Verstuur Hulpoproep</h1> 
    <form method="POST" class="post-form">{% csrf_token %} 
     {{ form.as_P }} 
     {{ form.errors }} 
     <button type="submit" class="save btn btn-default">Verstuur</button> 
    </form> 
{% endblock %} 

«Пользователь» в модели HulpOproep является ForeignKey и должен быть в настоящее время зарегистрированным пользователем пользовательским объектом. Я попытался определить это с помощью строки:

oproep.user = request.user 

Так что должно случиться: Получить объект «User» текущего пользователя и использовать его в качестве «HulpOproepForm.user». Таким образом, «HulpOproepForm.user» является «HulpOproep.user» и внешним ключом.

Я следил за несколькими учебниками и искал вокруг, но я не могу найти решение. Извините, если ответ логичен, но я использую Django всего 5 дней и имею 1,5 месяца опыта программирования под моим поясом.

Спасибо!

+0

Как я вижу, ваша форма требует заполнения поля пользователя. Это означает ввод от клиента, а не от кода. – PatNowak

+1

Поскольку вы получаете от пользователя запрос, зачем вам это нужно как поле в форме? Если вам нужно показать текущего пользователя, вы можете либо a) показать request.user в html-шаблоне, либо b) предварительно заполнить форму с данными только для чтения о пользователе. – Radek

ответ

0

Спасибо PatNowak и Radek!

Я не знал, что форма ожидает ввода пользователем вместо ввода кода. Мне удалось исправить это, добавив исключение в ModelForm.

class HulpOproepForm(ModelForm): 
    class Meta: 
     model = HulpOproep 
     exclude = ['user', 'time'] 
Смежные вопросы