Расширение пользователя, чтобы иметь много лекарств

Я хотел бы сохранить много лекарств в Профиле, как это сделано.

models.py

class Profile(AbstractUser):
    

class Medications(models.Model):
    user = models.ForeignKey(Profile,related_name='user',on_delete=models.CASCADE)
    name = models.CharField(default='',max_length=100)
    amount = models.IntegerField()
    per_time = models.IntegerField()
    time_choices = (('other', 'Other'),('Post meal', 'Post meal'),('Breakfast' ,'Breakfast'))
    choice = models.CharField(max_length=10, choices=time_choices,default='others')

forms.py

class MedicationForm(forms.ModelForm):
    name = forms.CharField(max_length=100, required=True, help_text='Required.')
    amount = forms.IntegerField( required=True, help_text='Required.')
    class Meta:
        model = Medications
        fields = ('name','amount','per_time','choice')

Теперь здесь я хочу создать лекарство с запросом пользователя. Я использовал if form.is_valid(): form.save(), который просто выдает IntegrityError на /addMed/ NOT NULL constraint failed: pages_medications.user_id, который должен быть из request.user

@login_required
@require_http_methods(["POST"])
def addMed(request):
    print('Adding med')
    print(request.user)
    print(request.POST)
    med = MedicationForm(request.POST or None,)
    print(med)
    return redirect('medications')

Что дает

Adding med
user
<QueryDict: {'csrfmiddlewaretoken': ['-'], 'name': ['Tylenol'], 'amount': ['1'], 'per_time': ['1'], 'choice': ['other'], 'medicationForm': ['Upload']}>

Затем перечислите здесь все лекарства.

views.py

@login_required
def medications(request):
    context={}  
    context['nmenu'] = 'medications'
    context['medicationForm'] = MedicationForm()
    return render(request, 'home.html', context)

Вы должны назначить вошедшего пользователя объекту Medications:

@login_required
@require_http_methods(['POST'])
def addMed(request):
    med = MedicationForm(request.POST, request.FILES)
    med.instance.user = request.user
    med.save()
    return redirect('medications')
Вернуться на верх