В Django форма отправки работает, но не может проанализировать ввод пользователя - PullRequest
1 голос
/ 12 марта 2020

Пользователь может отправлять форму без каких-либо проблем, однако вводимые пользователем данные не анализируются в базе данных. Разбираются только предопределенные данные по умолчанию.

По моему мнению, у моей модели есть проблема, однако я не смог ее найти, потому что в первый раз я создаю объект с ForeignKey и мои знания в части «экземпляра» модели ограничено. Или я слишком устал ...

Мои модели.py

class Ticket(models.Model):
    ticket_id = models.AutoField(primary_key=True, unique=True)
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='ticketer')
    status = models.CharField(max_length=6, choices=STATUS_CHOICES, default='open', blank=True)
    subject = models.CharField(max_length=60, default='Ticket', blank=False)
    body = models.TextField(blank=False)
    priority = models.CharField(max_length=6, choices=PRIORITY_LEVEL, default='low', blank=False)
    display = models.BooleanField(default=True, blank=True)
    created_at = models.DateTimeField(auto_now=True, blank=True)
    closed_at = models.DateTimeField(blank=True, null=True)
    handler = models.CharField(max_length=14, default='MT', blank=True)
    response = models.TextField(blank=True, default='We are working on your ticket!')

    def save(self, *args, **kwargs):
        super(Ticket, self).save(*args, **kwargs)

@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_or_update_ticket(sender, instance, created, **kwargs):
    Ticket.objects.create(user=instance)

Мои просмотры.py

@login_required
@transaction.atomic
def add_ticket_view(request, username):
    if request.method == 'POST':
        add_ticket_form = AddTicketForm(request.POST, instance=request.user)
        if add_ticket_form.is_valid():
            add_ticket_form.save()
            messages.success(request, ('Your ticket was successfully submitted!'))
            return redirect('..')
        else:
            messages.error(request, ('Please correct the error below.'))
    else:
        add_ticket_form = AddTicketForm(instance=request.user)
        context = {
        'add_ticket_form': add_ticket_form,
        }
    return render(request, 'pages/user-ticket-add.html', {
        'add_ticket_form': add_ticket_form
    })

Мои формы.py

class AddTicketForm(forms.ModelForm):

    class Meta:
        model = Ticket
        fields = ('priority', 'subject', 'body',)

Мой urls.py

urlpatterns = [
    path("", view=dashboard_view, name="dashboard"),
    url(r'^(?P<username>[\w.@+-]+)/profile/$', views.get_user_profile),
    url(r'^(?P<username>[\w.@+-]+)/profile/edit/$', views.edit_profile_view),
    url(r'^(?P<username>[\w.@+-]+)/tickets/$', views.user_ticket_view),
    url(r'^(?P<username>[\w.@+-]+)/tickets/add/$', views.add_ticket_view, name='add_ticket_view'),
]

Мой дополнительный билет. html:

                    <form method="POST" class="add-ticket-form" enctype="multipart/form-data">
                    {% csrf_token %}
                    {{ add_ticket_form|crispy }}
                    <div class="text-right mt-3">
                    <button type="submit" class="save btn btn-success btn waves-effect mb-1 waves-light">Submit</button>
                    </div>
                    </form>

Спасибо всем за помощь, ребята.

ОБНОВЛЕНИЕ - РЕШЕНИЕ:

Если кто-то пришел к этому вопросу, я не передавал форму как данные, я передавал ее связанному пользователю. Однако это не отношение OneToOne, USER здесь ForeignKey.

my views.py сейчас и работает:

@login_required
@transaction.atomic
def add_ticket_view(request, username):
    if request.method == 'POST':
        add_ticket_form = AddTicketForm(request.POST, request.FILES)
        if add_ticket_form.is_valid():
            data = add_ticket_form.save(commit=False)
            data.user = request.user
            data.save()
            messages.success(request, ('Your ticket was successfully submitted!'))
            return redirect('dashboard:user_ticket', username)
        else:
            messages.error(request, ('Please correct the error below.'))
    else:
        add_ticket_form = AddTicketForm(instance=request.user)
        context = {
        'add_ticket_form': add_ticket_form,
        }
    return render(request, 'pages/user-ticket-add.html', {
        'add_ticket_form': add_ticket_form
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...