Форма Django ошибочно добавляет новые записи в базу данных - PullRequest
0 голосов
/ 10 сентября 2018

Отказ от ответственности: Относительно новичок в Djano, поэтому простите любые недостатки в вопросе.

У меня есть простая форма с полем DAL, и я пытаюсь передать id значения формы и slug для отображения страницы сведений. DAL предоставляет результаты, как и ожидалось. При отправке я получаю следующую ошибку:

django.urls.exceptions.NoReverseMatch: Reverse for 'asset_detail' with arguments '(39526, '')' not found. 1 pattern(s) tried: ['(?P<id>[0-9]+)\\/(?P<slug>[-a-zA-Z0-9_]+)\\/$']

Обратите внимание, что идентификаторы существующих данных останавливаются на 39499. Этот идентификатор (и 39500-39525) был сгенерирован при отправке. Я не хочу добавлять новые записи в базу данных, а просто искать существующие. Ниже приведены URL, форма, виды, модель и шаблон:

# models.py
class CI(models.Model):
    ci_type = models.ForeignKey(Category,
                                related_name='assets',
                                on_delete=models.CASCADE,
                                blank=True,
                                null=True)
    name = models.CharField(max_length=200, db_index=True)
    slug = models.SlugField(max_length=200,db_index=True)
    status = models.BooleanField(default=True)
    serial = models.CharField(max_length=140, blank=True)
    asset_tag = models.CharField(max_length=53, blank=True)
    model_source = models.CharField(max_length=54, blank=True)
    vendor = models.CharField(max_length=58, blank=True)
    support_level = models.CharField(max_length=60, blank=True)

    class Meta:
        ordering = ('name',)
        index_together = (('id', 'slug'),)

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('lookup:asset_detail',
                       args=[self.id, self.slug])

# forms.py
class AssetForm(forms.ModelForm):
    category = forms.ModelChoiceField(
        queryset=Category.objects.all(),)
    name = forms.ModelChoiceField(
        queryset=CI.objects.all(),
        widget=autocomplete.ModelSelect2(
            url='asset-autocomplete',
            forward=(forward.Field('category', 'ci_type'),)))

    class Meta:
        model = CI
        fields = ('name',)

# views.py
class AssetView(CreateView):
    model = CI
    form_class = AssetForm
    template_name = 'lookup/asset.html'

# urls.py
    path('<int:id>/<slug:slug>/', views.ci_detail,
         name='asset_detail'),

#asset.html (template)
  <form action="{{ ci.get_absolute_url }}" method="post">
    <label for="asset_type">Select Asset:</label>
    {% csrf_token %}   
    {{ form.as_p }}
  <div class="col-4">
    <p><input class="btn btn-primary" type="submit" value="Select"></p>

Заранее спасибо!

...