kustiktm_kirill
@kustiktm_kirill
Покоряю мир Python'а

Почему выходит FOREIGN KEY constraint failed при удалении объекта?

Есть две разные страницы, где возможно добавить транспорт:
1) Прямо со страницы заказа
2) В личном кабинете

Если добавить объект (транспорт) из личного кабинета, то удаляется он успешно. А при добавлении его со страницы заказа - ошибка FOREIGN KEY constraint failed.

Код удаления объекта:
Приходит при удалении id объекта
Transport.objects.get(id=form['transport_id'], _client=client_current).delete()
return HttpResponse('ok')


Код добавления через личный кабинет:
transport = Transport.objects.create(_client=client_current, brand=form['brand'], model=form['model'],
                                     transport_type=form['transport_type'], gos_number=form['gos_number'])
return HttpResponse(json.dumps({'id': transport.id, 'brand': transport.brand, 'model': transport.model,
                                'transport_type': transport.transport_type,
                                'gos_number': transport.gos_number, 'images': [], 'orders': []}),
                    content_type="application/json")


Код добавления через запись:
form = request.POST
user = None
point_id = form['point']
fio = form['fio']
telephone = form['telephone']
date = form['date']
add_info = form['add_info']
try:
    form['register_client']
    if User.objects.filter(username=telephone):
        return HttpResponse(json.dumps({'status': 'err', 'desc': 'User already exists', 'code': 1}), content_type='application/json')
    user_model = User.objects.create(username=telephone, email=form['email'], password=form['password'])
    user = client.objects.create(_user=user_model, fio=fio, email=form['email'], telephone=telephone)
    user_model.user_permissions.add(Permission.objects.get(codename='is_client'))
    login(request, user_model)
except:
    user = client.objects.get(_user=request.user)
try:
    form['create_auto']
    ts = Transport.objects.create(_client=user, brand=form['brand'], model=form['model'],
                                     transport_type=form['transport_type'],
                                     gos_number=form['gos_number'])
except:
    ts_id = form['ts']
    ts = Transport.objects.get(id=ts_id)


Честно может где-то косяк какой-то, но я его не вижу. Костыли с try - except:
1) если пользователь не зареган, тогда он его создает (+ приходят соответствующие поля)
2) если требуется создать транспотрное средство непосредственно при заказе

models.py:
class client(models.Model):
    _user = models.ForeignKey(
        User,
        on_delete=models.CASCADE,
        verbose_name='Модель пользователя'
    )
    fio = models.TextField(
        verbose_name='ФИО',
    )
    email = models.EmailField(
        verbose_name='Эл. почта',
        unique=True
    )
    telephone = models.CharField(
        verbose_name='Номер телефона',
        max_length=11,
    )

    class Meta:
        permissions = (
            ("is_client", "Can see client's urls"),
        )

    def __str__(self):
        return self.fio


class Transport(models.Model):
    _client = models.ForeignKey(
        client,
        on_delete=models.CASCADE,
        verbose_name='Профиль клиента',
    )
    brand = models.TextField(
        verbose_name='Марка ТС'
    )
    model = models.TextField(
        verbose_name='Модель ТС'
    )
    transport_type = models.CharField(
        choices=att,
        max_length=3,
        verbose_name='Категория ТС'
    )
    gos_number = models.TextField(
        verbose_name='Гос. номер ТС'
    )
    vin = models.TextField(
        verbose_name='VIN номер'
    )

    def __str__(self):
        return str(self.brand) + ' ' + str(self.model)

Про некорректное название модели client знаю. Может позже исправлю.
  • Вопрос задан
  • 45 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы