首页 > 解决方案 > 如何将对象传递给 Django 中的模型字段?

问题描述

我正在尝试将从模型表单中获得的对象传递给模型中的字段。

这里涉及三个模型。Patient,DonationDonor

以下是模型:

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() 获得捐赠对象时,我将该对象分配到此处的“捐赠”变量中,并且我想将该对象分配/传递给 Donor 模型中的donor_donation 字段,该字段是捐赠模型的 ForeignKey。

我以为我可以更改该字段,就像我在此处将 Donor 的可用性设置为 False 一样,但它不起作用。我应该如何解决这个问题?

标签: djangodjango-modelsdjango-viewsdjango-forms

解决方案


推荐阅读