У меня есть следующая модель в 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')
Я пытаюсь создать форму, в которой пользователь может обновлять поля Number_Of_Boxes и Last_Collected данного лекарства, с которым они связаны. Мне нужно раскрывающееся меню, в котором пользователь может выбрать одно из своих лекарств, а затем обновить эти два поля. Я создал следующую модельную форму.
class CollectionForm(forms.ModelForm):
Medicine_Name = forms.ModelChoiceField(queryset=Medicine.objects.all())
class Meta:
model = Medicine
fields = ['Medicine_Name', 'Number_Of_Boxes', 'Last_Collected']
def __init__(self, user = None, *args, **kwargs):
super().__init__(*args, **kwargs)
if user:
self.fields['Medicine_Name'].queryset=Medicine.objects.filter(User_Associated=user)
У меня есть следующее представление для этой формы.
def update(request, *args, **kwargs):
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 )
Но у меня проблемы с первичным ключом. Экземпляр модели, который требует обновления, зависит от ввода пользователя (например, от имени лекарства), которое он выберет из раскрывающегося меню. Я не понимаю, как я могу ссылаться на экземпляр и где это нужно сделать (поскольку первичный ключ зависит от того, что пользователь выбирает в форме).