Отношения "один ко многим" в DJANGO - как сгенерировать строку уникальности на основе 2 составных ключей

Я пытаюсь создать отношение на основе составного ключа, основанного на 2 полях для уникальности. Насколько я понимаю, Django использует внешние ключи для определения отношений один ко многим?

Вот мой сценарий:

У меня есть 2 таблицы
. Таблица1

Table 1 Example

Таблица2

Lookup Table

Я хочу написать код для генерации строк для записей Table3, которые итерируются по таблице 2 и генерируют список ниже и генерируют составную комбинацию клавиш:

Table 3 - id / Question ID and Question

Я хочу создать эту связь с помощью models.py, однако каждый раз, когда я сохраняю запись, ID в таблице 2 увеличивается

см. пример таблицы 2

Problems I get

Как я могу заставить себя вести себя так?

Вот код, который я использовал
. Table1 - Parish i derive the value for parish.id
Таблица2 - CheckList.object.all()
Таблица3 - All_Inpection

def form_valid(self, form):       
    form.instance.author = self.request.user
    parish = form.save(commit=False)
    parish.user_id = self.request.user.id
    parish.save()
    entry = Company.objects.get(pk=parish.id)
    Checklists = Checklist.objects.all()
    for rec in Checklists: 
        new_rec=All_Inspection(str_status=rec.str_status, str_comment='',company_id=entry)
        new_rec.save()
    return super().form_valid(form)

Короткий ответ заключается в том, что - по крайней мере, сейчас - вы не можете этого сделать. Django ForeignKey работает с первичным ключом другой таблицы, а у вас не может быть составного первичного ключа.

Более длинный ответ включает в себя несколько вариантов.

Вариант 1

Подождите, пока тикет #373 будет слит... это обеспечит функциональность композитного PK для django, и вы сможете делать то, что вам нравится.

Вариант 2

Забудьте о составных ключах. Установите индекс unique_together в таблице, чтобы обеспечить уникальность, и используйте целочисленное или uuid ключевое поле, которое будет значением в вашем поле FK. Единственное, чего вам здесь не хватит, - это значения составного ключа в родительской таблице, потому что вместо него будет использоваться значение int/uuid.

Редактирование: после написания этой статьи я вспомнил, что unique_together устарел в пользу UniqueConstraint. То же самое, но если вы работаете с "современной" версией Django, вам следует использовать

Вернуться на верх