Пользователь может отправлять форму без каких-либо проблем, однако вводимые пользователем данные не анализируются в базе данных. Разбираются только предопределенные данные по умолчанию.
По моему мнению, у моей модели есть проблема, однако я не смог ее найти, потому что в первый раз я создаю объект с 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
})