Есть две разные страницы, где возможно добавить транспорт:
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 знаю. Может позже исправлю.