Ошибка отправки формы с request.user с использованием представления на основе классов и пользовательской ModelForm - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь создать запись через форму, и она не будет отправлять или передавать информацию в базу данных.Я уверен, что пользователь отображается в HTML, но он не отправляется с запросом.

Я могу успешно создать запись с помощью интерактивной оболочки без проблем, и тест, который я написал, проходит успешно.,Следуя документации (https://docs.djangoproject.com/en/2.2/topics/class-based-views/generic-editing/) и ссылке для добавления request.user (https://docs.djangoproject.com/en/2.2/topics/forms/modelforms/#django.forms.ModelForm)

Объект / Модель

class Event(models.Model, Activity):
    id = models.UUIDField(
        primary_key=True, default=uuid.uuid4, editable=False, unique=True)
    name = models.CharField(max_length=500)
    start_date = models.DateField(blank=True, null=True)
    end_date = models.DateField(blank=True, null=True)
    completion_date = models.DateField(blank=True, null=True)
    description = models.TextField(blank=True, null=True)
    private = models.BooleanField(default=True)
    owner_id = models.ForeignKey(User, on_delete=models.CASCADE)
    creation_date = models.DateField(auto_now_add=True)
    last_modified = models.DateTimeField(auto_now=True)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.id, self.description or ''

views.py

class EventCreate(LoginRequiredMixin, CreateView):
    form_class = EventForm
    template_name = 'app/event_form.html'
    success_url = reverse_lazy('event_list')

    def form_valid(self, form):
        form.instance.owner_id = self.request.user
        return super().form_valid(form)

forms.py

class EventForm(ModelForm):
    class Meta:
        model = Event
        fields = ['name', 'start_date', 'end_date',
                  'completion_date', 'description']

        def __init__(self, *args, **kwargs):
            self.owner_id = kwargs.pop('user')
            return super(EventForm, self).__init__(*args, **kwargs)

Ответы [ 2 ]

0 голосов
/ 22 мая 2019
  1. Сделайте минимальный рабочий вид, и теперь ModelForm не нужен.
#views.py

class EventCreate(CreateView):
    model = EventForm
    fields = ('name','start_date','end_date','completion_date','description')
    success_url = reverse_lazy('event_list')

    def form_valid(self, form):
        form.instance.owner_id = self.request.user
        return super().form_valid(form)
Отправил запрос в пустой документ HTML
<!doctype html>

<html lang="en">
<head>
  <meta charset="utf-8">

  <title>Simple HTML</title>
  <meta name="description" content="Test Form">


</head>

<body>
  <form method="POST" action="">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Submit!">
</form>

</body>
</html>

Результат: форма отправляется.Проблема: строка JavaScript не играла хорошо.С тех пор он был удален.

0 голосов
/ 18 мая 2019

Привет apowell656, если вы используете представление на основе классов, вам нужен конкретный класс модели, например, ваш пример:

class EventCreate(LoginRequiredMixin, CreateView):
form_class = EventForm
model = Event
template_name = 'app/event_form.html'
success_url = reverse_lazy('event_list')

def form_valid(self, form):
    form.instance.owner_id = self.request.user
    return super().form_valid(form)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...