Как передать объект в поле модели в Django?
Я пытаюсь передать объект, полученный из формы модели, в поле модели.
Здесь задействованы три модели. Patient
, Donation
и Donor
Вот модели:
class Donor(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
donor_dob = models.DateField(auto_now=False, auto_now_add=False, default=None)
id_card = models.CharField(max_length=7)
phone_number = models.CharField(max_length=7)
blood_group = models.CharField(max_length=20, choices=BLOOD_GROUPS, default='O_Positive')
availability = models.BooleanField(default=True)
donor_donation = models.ForeignKey(
'Donation', blank=True, null=True, on_delete=models.DO_NOTHING)
class Patient(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=30)
patient_dob = models.DateField(auto_now=False, auto_now_add=False, default=None)
id_card = models.CharField(max_length=7)
phone_number = models.CharField(max_length=7)
blood_group = models.CharField(max_length=20, choices=BLOOD_GROUPS, default='O+')
class Donation(models.Model):
donation_donor = models.ForeignKey(
Donor, on_delete=models.CASCADE, related_name='donations')
patient = models.ForeignKey(Patient, on_delete=models.CASCADE)
donation_date = models.DateTimeField(auto_now=True)
amount = models.DecimalField(max_digits=5, decimal_places=2)
Я использую DonationForm
для ввода новой записи о пожертвовании.
вот форма:
class DonationForm(forms.ModelForm):
donation_donor = forms.ModelChoiceField(
queryset=Donor.objects.filter(availability=True))
class Meta:
model = Donation
fields = ['donation_donor', 'patient', 'amount']
и, наконец, вот представление для ввода нового объекта/записи пожертвования
def new_donation(request):
if request.method == 'POST':
form = DonationForm(request.POST or None)
# print(request.POST)
print(request.POST['donation_donor'])
if form.is_valid():
donor = Donor.objects.get(id=request.POST['donation_donor'])
donor.availability = False
print('Donor: ', donor)
donation = form.save()
form.save()
donor.donation_donor = donation
donor.save()
donor = setattr(donor, 'donation_donor', donation)
print(donor)
return render(request, 'new_donation.html', {'form': form})
form = DonationForm()
return render(request, 'new_donation.html', {'form': form})
ЧТО Я ПЫТАЮСЬ СДЕЛАТЬ
Когда я получаю объект пожертвования из form.save(), я присваиваю этот объект в переменную `donation' здесь, и я хочу присвоить/передать этот объект полю donor_donation в модели Donor, которое является ForeignKey к модели Donation.
Я думал, что смогу изменить это поле так же, как я установил доступность Donor на False, но это не сработало. Как мне обойти это?