Updateview создать новую запись при обновлении - PullRequest
1 голос
/ 25 июня 2019

У меня есть модель с слагфилдом в качестве первичного ключа.

У меня есть updateview, когда я нажимаю кнопку обновления, это создает новый объект.

Например:

старая запись : название = данные 1

обновить запись : title = data 2

вывод :

  1. данные 2
  2. данные 1

models.py

class mymodel(model.Models):

    slug = models.SlugField(max_length=200, unique=True, primary_key=True, auto_created=False)
    title = models.CharField(max_length=200)

def __str__(self):
    return self.title

def save(self, *args, **kwargs):
    self.slug = slugify(self.title)
    super(mymodel, self).save(*args, **kwargs)

forms.py

class myupdateform(forms.ModelForm):
    class Meta:
        model = mymodel
        fields = ('__all__')

views.py

class myupdateview(generic.UpdateView):

    template_name = 'update.html'
    model = mymodel
    context_object_name = 'mymodel_obj'
    form_class = myupdateform

urls.py

path('myupdate/<slug:slug>/edit/', myupdateview.as_view(), name='myupdate')

Ответы [ 2 ]

1 голос
/ 25 июня 2019

Также вы можете использовать сигналы модели для установки слага.

Например, сигнал post_save.

https://docs.djangoproject.com/en/2.2/ref/signals/#django.db.models.signals.post_save

1 голос
/ 25 июня 2019

проблема связана с пользовательским методом save (), который вы используете в вашем models.py Это также срабатывает, когда происходит обновление. Вы можете решить это, определив, является ли объект новым или нет

решение:

self.pk is None:

возвращает True в новом объекте Model, если только объект не имеет UUIDField в качестве primary_key.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...