Присвоение значения полю внешнего ключа - PullRequest
0 голосов
/ 11 ноября 2018

У меня проблемы с назначением заголовка для модели UserService, которая является внешним ключом для другой модели.

models.py

class IndustryService(models.Model):    
    industryname = models.ForeignKey(Industry, on_delete=models.CASCADE)
    title = models.CharField(max_length=120)

class UserService(models.Model):  
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    title = models.ForeignKey(IndustryService, on_delete=models.CASCADE)

Вот часть кода в представлении, которое не работает:

    industryservices = IndustryService.objects.filter(industryname=industry)

    for service in industryservices:                
        try:
            qs = UserService.objects.get(user=user, title=service.title)
        except: 
            userserv = UserService.objects.create(user=request.user)
            userserv.title = service
            userserv.save()

Я получаю следующую ошибку:

NOT NULL constraint failed: accounts_userservice.title_id

Судя по моему тестированию, неправильный способ присвоения значения полю внешнего ключа 'title' (т.е. эти две строки кода).

    service2 = IndustryService.objects.get(title=service.title)
    userserv.title = service2

Есть мысли о том, как я могу это исправить? Спасибо!

1 Ответ

0 голосов
/ 11 ноября 2018

Вы делаете два обновления, без необходимости. Либо создайте предмет за один раз:

 userserv = UserService.objects.create(user=request.user, title=service)

или создать экземпляр без сохранения, а затем сохранить в конце:

userserv = UserService(user=request.user)
userserv.title = service
userserv.save()
...