Как уже говорили другие, объект Drug не должен иметь количество, связанное с ним, но должна быть прописана "запись".
Я думаю, что это структура модели, которая вам нужна:
QUANTITY_STR = ['Bottle', 'Tablet' 'Injection', 'Capsules', 'other']
class DocAide(models.Model):
# same properties but remove `drugs` from this model
class Drug(models.Model):
# same properties but remove `quantity` property
class Prescription(model.Model):
drug = model.ForeignKey(to=Drug, related_name='prescriptions')
doc_aide = model.ForeignKey(to=DocAide, related_name='prescriptions')
quantity = models.IntegerField()
qty_container = models.CharField(max_length=10, choices=QUANTITY_STR, default=QUANTITY_STR[0])
Я изменил несколько вещей для вас, предполагая, что я правильно понял логику вашего бизнеса c. Например, как работает поле quantity
.
Я создал два поля для описания количества. quantity
содержит числовое значение, а qty_container
содержит имя контейнера, если хотите, например, "Bottle", "Впрыск" и т. Д.
qty_container
имеет max_length
, равное количество символов в слове «Инъекция», так как это самое большое слово, которое может поместиться в этом поле. default
этого поля было больше, чем max_length
, что могло вызвать ошибку.
Теперь я не уверен, почему вы хотели сохранить кортеж из двух строк в поле количества, поэтому я проигнорировал это, но если вы можете прокомментировать предполагаемую логику c, здесь я мог бы отредактировать ответ.
В любом случае, модель Prescription
.
Эта модель будет действовать как посредник между Drug и DocAide, и именно он будет хранить информацию о количестве. Я связал его с Drug
и DocAide
, используя внешние ключи, и установил для related_name
подходящие имена. Эти "related_names", которые вы найдете, появятся в указанной модели. Так, например, если вы можете сделать
doc_aide = DocAide.objects.get(pk=1)
for presc in doc_aide.prescriptions:
print(presc.drug.name)
print(presc.quantity)
Это означает, что один DocAide
объект будет связан с одним или несколькими Prescription
объектами, каждый из которых содержит quantity
информацию и связан с Drug
object:
DocAide (id, etc) >> Prescription (doc_aide_id, drug_id, qty_info) >> Drug (id, etc)
В качестве примечания: после того, как вы убедитесь, что все работает и у вас все хорошо для go, вам может понадобиться изучить оптимизацию запросов в Django, потому что, как это написано сейчас, это довольно неоптимизировано. Но не беспокойтесь об оптимизации, пока вы не закончили и ваш код работает правильно.