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

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

下面是终端给出的内容[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
模型

class BusinessCard(models.Model):
    '''7. Модель карточки по делу'''
    original_name = models.CharField(
        unique=True,
        max_length=100,
        verbose_name='номер дела'
        )
    author = models.ForeignKey(
        User,
        models.SET_NULL,
        blank=True,
        null=True,
        related_name='cards',
        verbose_name='Автор карточки'
        )
    case_category = models.ForeignKey(
        Category,
        blank=True,
        null=True,
        on_delete=models.SET_NULL,
        related_name='cards',
        verbose_name='Категория дела'
    )
    defendant = models.CharField(
        max_length=150,
        verbose_name='подсудимый'
    )
    under_arrest = models.BooleanField(
        verbose_name='под стражей'
        )
    article = models.PositiveSmallIntegerField(
        verbose_name='Статья УК РФ'
    )
    pub_date = models.DateTimeField(
        auto_now_add=True,
        verbose_name='Дата создания/изменения карточки'
        )
    sides_case = models.ManyToManyField(
        SidesCase,
        verbose_name='Поля сторон по делу'
    )
    preliminary_hearing = models.DateField(
        verbose_name='Дата предварительного слушания/(с/з)'
    )

    class Meta:
        ordering = ('pub_date',)
        verbose_name = 'Карточка на дело'
        verbose_name_plural = 'карточка на дело'

    def __str__(self):
        return self.original_name

查看

@login_required
def card_create(request):
    '''Шаблон создание карточки'''
    template = 'create_card.html'
    form = CardForm(request.POST or None)
    if form.is_valid():
        card = form.save(commit=False)
        card.author = request.user
        card.save()
        form = CardForm()
        return redirect('business_card:profile', request.user)
    return render(request, template, {'form': form})

@login_required
def card_edit(request, post_id):
    '''Шаблон редактирования карточки'''
    card = get_object_or_404(
        BusinessCard.objects.select_related(
            'case_category', 'author'), id=post_id
    )
    if request.user != card.author:
        return redirect('business_card:business_card_detail', card.pk)
    form = CardForm(request.POST or None, instance=card)
    if form.is_valid():
        form.save()
        return redirect('business_card:business_card_detail', card.pk)
    form = CardForm(instance=card)
    context = {
        'form': form,
        'is_edit': True,
        'card': card,
    }
    return render(request, 'create_card.html', context)

形式

class CardForm(ModelForm):
    class Meta:
        model = BusinessCard
        fields = [
            'original_name', 'author', 'case_category',
            'defendant', 'under_arrest', 'article', 'sides_case',
            'preliminary_hearing'
        ]

        labels = {
            'original_name': 'Номер дела',
            'case_category': 'категория'
        }

        help_texts = {
            'original_name': 'Номер нового дела',
            'case_category': 'Категория'
        }

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

{% extends 'base.html' %}
{% block Title %}<title>{% if is_edit %} Редактировать карточку {% else%} Новая карточка {% endif %}</title>{% endblock %}
{% block content %}
  <div class="container py-5">
    <div class="row justify-content-center">
      <div class="col-md-8 p-5">
        <div class="card">
          <div class="card-header">
            {% if is_edit %} Редактировать карточку {% else%} Новая карточка {% endif %}
          </div>
          <div class="card-body">
            {% if form.errors %}
              {% for field in form %}
                {% for error in field.errors %}
                  <div class="alert alert-danger">
                    {{ error|escape }}
                  </div>
                {% endfor %}
              {% endfor %}
              {% for error in form.non_field_errors %}
                <div class="alert alert-danger">
                  {{ error|escape }}
                </div>
              {% endfor %}
          {% endif %}
          <form method="card"
            {% if card %}
              "{% url 'business_card:card_edit' card.pk %}"
            {% else %}
              "{% url 'business_card:card_create' %}"
            {% endif %}>
            {% csrf_token %}
            {% for field in form %}
              <div class="form-group row my-3 p-3 textarea">
                <label for="{{field.id_for_label}}">
                  {{ field.label }}
                  {% if field.label.required %}
                    <span class="required text-danger" >*</span>
                  {% endif %}
                </label>
                  {{ field }}
                  {% if field.help_text %}
                  <p class="help">{{ field.help_text|safe }}</p>
                  {% endif %}
              </div>
            {% endfor %}
            <div class="form-group row my-3 p-3">
              <label for="{{ field.id_for_label }}">
                {{ field.label }}
              </label>
            </div>
            <div class="d-flex justify-content-end">
              <button type="submit" class="btn btn-primary">
                {% if is_edit %}
                  Сохранить
                {% else %}
                  Добавить
                {% endif %}
              </button>
            </div>
          </form>
          </div>
        </div>
      </div>
    </div>
  </div>
{% endblock %}
pobjuy32

pobjuy321#

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

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

相关问题