У меня есть следующая модель в Django, которую я использую для хранения данных о лекарствах.
class Medicine(models.Model):
Medicine_Name = models.CharField(max_length=100)
User_Associated = models.ForeignKey(User, on_delete=models.CASCADE)
Tablets_In_Box = models.IntegerField()
Dose_in_mg = models.IntegerField()
Dose_Tablets = models.IntegerField()
Number_Of_Boxes = models.IntegerField()
Last_Collected = models.DateField()
def __str__(self):
return self.Medicine_Name
def get_absolute_url(self):
return reverse('tracker-home')
Я пытаюсь создать модельную форму, в которой пользователь может обновить последнюю коллекцию одного из своих лекарства. Вот с чего я начал.
class CollectionForm(forms.ModelForm):
class Meta:
model = Medicine
fields = ['Medicine_Name', 'Number_Of_Boxes', 'Last_Collected']
Я не понимаю, как я могу вызвать экземпляр моей модели на основе 'Medicine_Name' из поля. Другими словами, мне нужно, чтобы пользователь мог выбрать правильное лекарство из раскрывающегося меню, а затем форма должна обновить поля Last_Collected и Numer_Of_Boxes в моей модели медицины.
https://docs.djangoproject.com/en/2.1/topics/forms/modelforms/#the -save-method
Кажется, это содержит соответствующую информацию, но мне сложно понять, как ее использовать в этом случае. Как я могу правильно получить экземпляр нужной мне лекарственной формы на основе данных, введенных пользователем в форму? Кроме того, как я могу использовать метод сохранения в моих представлениях, чтобы убедиться, что база данных обновляется правильно?
EDIT Добавлено представление для формы:
def update(request, pk):
instance = Medicine.objects.get(id=pk)
if request.method == 'POST':
form = CollectionForm(user=request.user, instance=instance, data=request.POST)
if form.is_valid():
instance = form.save(commit=False)
instance.User_Associated = request.user
instance.save()
else:
form = CollectionForm()
context = {'form': form}
return render(request, 'tracker/medicine_collection.html', context )