Django: проблема с обновлением объекта из модели "уже существует"? - PullRequest
0 голосов
/ 02 сентября 2018

Я новичок в веб-разработке и в Django. У меня возникают трудности с поиском правильного способа обновления записи (объекта) моей модели в моем проекте Django. Можете ли вы взглянуть на мой код и помочь мне исправить его?
После запуска кода ниже я получил ошибки, что объект уже существует. (да, и так и должно быть, я хочу обновить его !!!) Я думаю, проблема is_valid ().

У меня есть следующая модель:

class  QA_machine_DB(models.Model):

    QAmachine = models.CharField( max_length = 64, unique=True)
    status = models.CharField(max_length=32,null=True, blank=True)
    def __str__(self):
        return "%s" %  (self.id)

У меня есть следующий вид:

def formreport(request):
    Booking= BookingForm(request.POST)

    if request.method == 'POST':
        if Booking.is_valid():
            print('############## VALIDATION  GOOD ######################### ')
            machine_name= Booking['QAmachine']
            print('Name',Booking.cleaned_data['QAmachine'])
            print("Status: ",Booking.cleaned_data['status'])

            to_book =QA_machine_DB.objects.get(QAmachine= machine_name)  # if I hard code the machine_name  it works . !?  I guess is_valid is the problem .... 
            #to_book =QA_machine_DB.objects.get(QAmachine= 'ali' )
            to_book.status='free'
            to_book.save()

            return index(request)
        else:
            print('Form not valid', Booking.errors)


    return render(request,'QA_interface_app/form_page.html', { 'Booking': Booking})

Я действительно не вижу этого, если бы вы могли мне помочь, я был бы фантастическим. Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Во-первых, я не прошел через is_valid (), но я нашел обходной путь, и на данный момент этого достаточно для моего проекта:

    if request.method == 'POST':

    post_request_dict = (dict(request.POST)) # get the query set into dict
    #  then I use the data to do the update.  
    print('++++++  PK ++++++:',post_request_dict['QAmachine'][0])
    TT=QA_machine_DB.objects.get(QAmachine=post_request_dict['QAmachine'][0])
    TT.status=post_request_dict['status'][0]
    TT.save()

    if Booking.is_valid():

        return index(request)
    else:
        print('Form not valid', Booking.errors)

Это довольно некрасиво, но работает ... с pk или экземпляром в том виде, в котором он мне не помог. Пожалуйста, дайте мне знать для альтернативы ....

0 голосов
/ 02 сентября 2018

Можете ли вы попробовать изменить:

to_book =QA_machine_DB.objects.get(QAmachine= machine_name)

на

to_book =QA_machine_DB.objects.get(QAmachine=Booking.cleaned_data['QAmachine'])
...