django 保存和编辑卡片的问题,更改/添加模型和停止保存/编辑卡片

sdnqo3pr  于 2023-10-21  发布在  Go
关注(0)|答案(1)|浏览(159)

下面是终端给出的内容[03/Oct/2023 16:15:52]“GET /create/?csrfmiddlewaretoken=xgcCZx4x2RjaTeFT5Sn6OBqC3k9VZUBO69tG4zJMiNuVwne9NTX1LXpdRJqn03AZ&original_name=222&author=1&case_category=3&defendant=%D0%9F%D0%B5%D1%82%D1%80%D0%BE%D0%B2&article= 200&side_case = 3&Observary_hearing =20.09.2023 HTTP/1.1”200 8459
模型

  1. class BusinessCard(models.Model):
  2. '''7. Модель карточки по делу'''
  3. original_name = models.CharField(
  4. unique=True,
  5. max_length=100,
  6. verbose_name='номер дела'
  7. )
  8. author = models.ForeignKey(
  9. User,
  10. models.SET_NULL,
  11. blank=True,
  12. null=True,
  13. related_name='cards',
  14. verbose_name='Автор карточки'
  15. )
  16. case_category = models.ForeignKey(
  17. Category,
  18. blank=True,
  19. null=True,
  20. on_delete=models.SET_NULL,
  21. related_name='cards',
  22. verbose_name='Категория дела'
  23. )
  24. defendant = models.CharField(
  25. max_length=150,
  26. verbose_name='подсудимый'
  27. )
  28. under_arrest = models.BooleanField(
  29. verbose_name='под стражей'
  30. )
  31. article = models.PositiveSmallIntegerField(
  32. verbose_name='Статья УК РФ'
  33. )
  34. pub_date = models.DateTimeField(
  35. auto_now_add=True,
  36. verbose_name='Дата создания/изменения карточки'
  37. )
  38. sides_case = models.ManyToManyField(
  39. SidesCase,
  40. verbose_name='Поля сторон по делу'
  41. )
  42. preliminary_hearing = models.DateField(
  43. verbose_name='Дата предварительного слушания/(с/з)'
  44. )
  45. class Meta:
  46. ordering = ('pub_date',)
  47. verbose_name = 'Карточка на дело'
  48. verbose_name_plural = 'карточка на дело'
  49. def __str__(self):
  50. return self.original_name

查看

  1. @login_required
  2. def card_create(request):
  3. '''Шаблон создание карточки'''
  4. template = 'create_card.html'
  5. form = CardForm(request.POST or None)
  6. if form.is_valid():
  7. card = form.save(commit=False)
  8. card.author = request.user
  9. card.save()
  10. form = CardForm()
  11. return redirect('business_card:profile', request.user)
  12. return render(request, template, {'form': form})
  13. @login_required
  14. def card_edit(request, post_id):
  15. '''Шаблон редактирования карточки'''
  16. card = get_object_or_404(
  17. BusinessCard.objects.select_related(
  18. 'case_category', 'author'), id=post_id
  19. )
  20. if request.user != card.author:
  21. return redirect('business_card:business_card_detail', card.pk)
  22. form = CardForm(request.POST or None, instance=card)
  23. if form.is_valid():
  24. form.save()
  25. return redirect('business_card:business_card_detail', card.pk)
  26. form = CardForm(instance=card)
  27. context = {
  28. 'form': form,
  29. 'is_edit': True,
  30. 'card': card,
  31. }
  32. return render(request, 'create_card.html', context)

形式

  1. class CardForm(ModelForm):
  2. class Meta:
  3. model = BusinessCard
  4. fields = [
  5. 'original_name', 'author', 'case_category',
  6. 'defendant', 'under_arrest', 'article', 'sides_case',
  7. 'preliminary_hearing'
  8. ]
  9. labels = {
  10. 'original_name': 'Номер дела',
  11. 'case_category': 'категория'
  12. }
  13. help_texts = {
  14. 'original_name': 'Номер нового дела',
  15. 'case_category': 'Категория'
  16. }

请帮帮忙……
我不知道到哪里去找问题

  1. {% extends 'base.html' %}
  2. {% block Title %}<title>{% if is_edit %} Редактировать карточку {% else%} Новая карточка {% endif %}</title>{% endblock %}
  3. {% block content %}
  4. <div class="container py-5">
  5. <div class="row justify-content-center">
  6. <div class="col-md-8 p-5">
  7. <div class="card">
  8. <div class="card-header">
  9. {% if is_edit %} Редактировать карточку {% else%} Новая карточка {% endif %}
  10. </div>
  11. <div class="card-body">
  12. {% if form.errors %}
  13. {% for field in form %}
  14. {% for error in field.errors %}
  15. <div class="alert alert-danger">
  16. {{ error|escape }}
  17. </div>
  18. {% endfor %}
  19. {% endfor %}
  20. {% for error in form.non_field_errors %}
  21. <div class="alert alert-danger">
  22. {{ error|escape }}
  23. </div>
  24. {% endfor %}
  25. {% endif %}
  26. <form method="card"
  27. {% if card %}
  28. "{% url 'business_card:card_edit' card.pk %}"
  29. {% else %}
  30. "{% url 'business_card:card_create' %}"
  31. {% endif %}>
  32. {% csrf_token %}
  33. {% for field in form %}
  34. <div class="form-group row my-3 p-3 textarea">
  35. <label for="{{field.id_for_label}}">
  36. {{ field.label }}
  37. {% if field.label.required %}
  38. <span class="required text-danger" >*</span>
  39. {% endif %}
  40. </label>
  41. {{ field }}
  42. {% if field.help_text %}
  43. <p class="help">{{ field.help_text|safe }}</p>
  44. {% endif %}
  45. </div>
  46. {% endfor %}
  47. <div class="form-group row my-3 p-3">
  48. <label for="{{ field.id_for_label }}">
  49. {{ field.label }}
  50. </label>
  51. </div>
  52. <div class="d-flex justify-content-end">
  53. <button type="submit" class="btn btn-primary">
  54. {% if is_edit %}
  55. Сохранить
  56. {% else %}
  57. Добавить
  58. {% endif %}
  59. </button>
  60. </div>
  61. </form>
  62. </div>
  63. </div>
  64. </div>
  65. </div>
  66. </div>
  67. {% endblock %}
pobjuy32

pobjuy321#

您需要使用post作为表单**method="…"[mdn-doc],url为action="…"**[mdn-doc],因此:

  1. <form method="post" action="{% if card %}{% url 'business_card:card_edit' card.pk %}{% else %}{% url 'business_card:card_create' %}{% endif %}">

相关问题