Как сравнить 2 ForeignKey?

Есть такие модели:
class Client(models.Model):
    full_name = models.CharField('Full name', max_length=45)

class Document(models.Model):
    description = models.CharField('Description', max_length=45)
    client = models.ForeignKey('Client')

class Ticket(models.Model):
    description = models.CharField('Description', max_length=255)
    client = models.ForeignKey('Client')
    document = models.ForeignKey('Document')

Так вот в чем вопрос:
Допустим я создаю новый Ticket, но случайно добавил клиента одного, а документы другого клиента, как мне этого избежать?
  • Вопрос задан
  • 191 просмотр
Решения вопроса 1
MrLinch
@MrLinch
Just like coding...
Поддерживаю iegor. Я конечно не знаком с вашей задачей. Но предполагаю что документ относится к конкретному клиенту, а тикет в свою очередь к конкретному документу.
Должно быть как-то так:
class Client(models.Model):
    full_name = models.CharField('Full name', max_length=45)

class Document(models.Model):
    description = models.CharField('Description', max_length=45)
    client = models.ForeignKey('Client')

class Ticket(models.Model):
    description = models.CharField('Description', max_length=255)
    document = models.ForeignKey('Document')


Имея такую структуру БД, ваша проблема исчезнет.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@iegor
У вас композиция базы неверная, подумайте над отношениями, почитайте про нормальные формы.
Ответ написан
Комментировать
@pyHammer Автор вопроса
Предположил, что можно заполнять так.
doc = Document.objects.get(pk=request.data['document'])
Ticket.objects.create(description=u"Бла Бла", client=doc.client, document=doc)

Тогда передавать client_id в POST запросе нет необходимости. Но правильно ли это с позиции REST?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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