Django создает новый объект вместо обновления - PullRequest
0 голосов
/ 26 апреля 2018

В настоящее время я работаю над новостным веб-сайтом, используя django, и у меня возникла проблема с обновлением категорий.

Я создал представление, в котором используется старое имя категории и новая категория с использованием формы.

Это мой код

def update_category(request):

    if request.method=='POST':
        old_name=request.POST.get('old_name').strip() # get old name
        new_name=request.POST.get('new_name').strip() # get new name
        categorie=Category.objects.get(title=old_name) # get category by title (pk)
        categorie.title=new_name # update the title
        categorie.save() # save to the database

return HttpResponseRedirect('/admin/Category_Management)

Например, если я пытаюсь изменить категорию "Технология" на "Компьютерные науки", вместо обновления django создает новую категорию "Компьютерные науки".«Технология»

Это моя категория модели

class Category(models.Model):
    class Meta:
        verbose_name='Catégorie'
        verbose_name_plural='Catégories'

    title=models.CharField(primary_key=True,max_length=50,null=False,blank=False,verbose_name='Titre')

    def __str__(self):
        return self.title.title()

1 Ответ

0 голосов
/ 26 апреля 2018

Почему вы установили заголовок primary_key=True?Есть ли какая-то особая причина?

Django автоматически создает первичный ключ (pk).Отметьте здесь (https://docs.djangoproject.com/en/2.0/topics/db/models/#automatic-primary-key-fields)

Измените вашу модель на ниже

class Category(models.Model):
    class Meta:
        verbose_name='Catégorie'
        verbose_name_plural='Catégories'

    title=models.CharField(max_length=50,null=False,blank=False,verbose_name='Titre')

    def __str__(self):
        return self.title.title()

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

ps

ПК не должен меняться. Если вы измените ПК и сохраните его снова, он сохранится в другом объекте модели. Например,

category = Category.objects.get(title='test')
category.id = None
category.title = 'new test'
category.save() # it will make another category, with title 'new test'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...