Django обновление экземпляра модели на основе пользовательского ввода из раскрывающегося меню - PullRequest
0 голосов
/ 06 августа 2020

У меня есть следующая модель в 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 )

Но у меня проблемы с первичным ключом. Экземпляр модели, который требует обновления, зависит от ввода пользователя (например, от имени лекарства), которое он выберет из раскрывающегося меню. Я не понимаю, как я могу ссылаться на экземпляр и где это нужно сделать (поскольку первичный ключ зависит от того, что пользователь выбирает в форме).

...