外键字段不能保存在Django中



我有这两个通过外键相关的模型。我从一个webhook获取关于事务的响应并保存到模型中。我试图做的是将外键元素保存到事务历史记录中,但当数据即将保存时,我不断收到错误,无法分配"1〃:"TransactionHistory.level";必须是";级别";例子

model
class Level(models.Model):
name = models.CharField(max_length=200, null=True, blank=True,)
fees_amount = models.PositiveSmallIntegerField()
class TransactionHistory(models.Model):
level = models.ForeignKey(Level, on_delete=models.CASCADE, null=True, blank=True, )
student_full_name = models.CharField(max_length=120)
transaction_id = models.CharField(max_length=120)
student_id_number = models.CharField(max_length=120)
amount = models.DecimalField(default=0.0, max_digits=19, decimal_places=2)
status = models.CharField(max_length=120, null=True, blank=True)
email = models.EmailField(max_length=120, null=True, blank=True)
phone = models.CharField(max_length=120, null=True, blank=True)
date = models.DateTimeField(auto_now_add=True)

View.py 
@csrf_exempt
def webhook(request):
# Verify if request came from Paystack
if request.method == 'POST':
response_data = json.loads(request.body)
if response_data["event"] == "charge.success":
transaction_id = (response_data["data"]["reference"])
if not TransactionHistory.objects.filter(transaction_id=transaction_id).exists():
status = (response_data["data"]["status"])
amountraw = (response_data["data"]["amount"])
student_full_name = (response_data["data"]["metadata"]["custom_fields"][0]["student_full_name"])
level = (response_data["data"]["metadata"]["custom_fields"][0]["level"])
student_id_number = (response_data["data"]["metadata"]["custom_fields"][0["student_id_number"])
email = (response_data["data"]["metadata"]["custom_fields"][0]["email"])
phone = (response_data["data"]["metadata"]["custom_fields"][0]["phone"])
amount = (str(int(amountraw) / 100))
if status == 'success':
transaction = TransactionHistory(
level=level,
student_full_name=student_full_name,
amount=amount,
transaction_id=transaction_id,
status=status,
student_id_number=student_id_number,
email=email,
phone=phone,
)
transaction.save()
return HttpResponse(status=200)


这是我得到的错误:

raise ValueError(
ValueError: Cannot assign "'1'": "TransactionHistory.level" must be a "Level" instance.

如果使用主键,则将其分配给level_id,因此:

TransactionHistory(
level_id=level,
student_full_name=student_full_name,
amount=amount,
transaction_id=transaction_id,
status=status,
student_id_number=student_id_number,
email=email,
phone=phone,
)

注意:与其手动验证和保存对象,不如使用ModelForm[Django-doc]ModelForm不这不仅简化了在HTML中呈现表单,而且还使其更加方便以验证输入,并数据存储在相应的模型中。

最新更新