django-models - 如何在 django 中插入带有外键字段的 modelForm 数据?
问题描述
我收到以下错误:
无法分配“'3'”:“Issue.isbn”必须是“Book”实例。
这是我的具有两个外键属性的模型:
class Student(models.Model):
id = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True, verbose_name='ID')
class_name = models.CharField(max_length=100)
roll = models.CharField(max_length=100)
section = models.CharField(max_length=100)
shift = models.CharField(max_length=100)
medium = models.CharField(max_length=100)
session = models.CharField(max_length=100)
sin = models.CharField(max_length=100)
resident = models.CharField(max_length=100)
hall = models.CharField(max_length=100)
room = models.CharField(max_length=100)
def __str__(self):
return str(self.id.id)
class Meta:
managed = False
db_table = 'student'
@receiver(post_save, sender=User)
def create_student(sender, instance, created, **kwargs):
if created:
Student.objects.create(id=instance)
instance.student.save()
class Book(models.Model):
id = models.BigAutoField(primary_key=True, serialize=False, verbose_name='ID'),
title = models.CharField(max_length=100)
category = models.CharField(max_length=100)
language = models.CharField(max_length=100)
isbn = models.CharField(max_length=100, unique=True)
author = models.CharField(max_length=100)
publisher = models.CharField(max_length=100)
edition = models.CharField(max_length=100)
year = models.CharField(max_length=100)
quantity = models.IntegerField()
issued = models.IntegerField(null=True, blank=True)
price = models.CharField(max_length=100)
location = models.CharField(max_length=100)
donated_by = models.CharField(max_length=100)
def __str__(self):
return "%s" % self.id
class Meta:
managed = False
db_table = 'book'
class Issue(models.Model):
id = models.BigAutoField(primary_key=True, serialize=False, verbose_name='ID'),
isbn = models.ForeignKey(Book, on_delete=models.CASCADE, verbose_name='isbn_id')
student = models.ForeignKey(Student, on_delete=models.CASCADE, verbose_name='student_id')
quantity = models.IntegerField()
issued_date = models.DateField()
return_date = models.DateField()
# def __str__(self):
# return "%s" % (self.student)
class Meta:
managed = False
db_table = 'issue'
#形式 - - - - - - - - - - - - - - - - - -
类IssueForm(forms.ModelForm):
student = forms.CharField(
widget=forms.TextInput(
attrs={
"placeholder": "student",
"class": "form-control"
}
))
isbn = forms.CharField(
widget=forms.TextInput(
attrs={
"placeholder": "isbn",
"class": "form-control"
}
))
quantity = forms.IntegerField(initial=1,
widget=forms.NumberInput(
attrs={
"placeholder": "quantity",
"class": "form-control"
}
))
issue_date = forms.DateField(initial=datetime.today(),
disabled=True,
widget=forms.DateInput(
attrs={
'type': 'date',
"placeholder": "issue_date",
"class": "form-control"
}
))
return_date = forms.DateField(
widget=forms.DateInput(
attrs={
'type': 'date',
"class": "form-control",
}
))
class Meta:
model = Issue
fields = ('student', 'isbn', 'quantity', 'issue_date', 'return_date',)
我想插入一些数据视图 ------------------
@login_required(login_url="/login/")
def books_issue(request):
msg = None
success = False
if request.method == "POST":
form = IssueForm(request.POST or None)
isbn = request.POST.get("isbn")
student = request.POST.get("student")
print(isbn, student)
if form.is_valid():
print("Form is valid")
form.save()
messages.success(request, 'Book Issued Successfully!')
success = True
return redirect("books_issue_list")
else:
msg = 'Form is not valid'
else:
form = IssueForm()
context = {"form": form, "msg": msg, "success": success}
return render(request, 'books/books-issue.html', context)
请帮助插入数据。
解决方案
推荐阅读
- c# - C# 关闭已创建但从未保存的 Microsoft WORD 文档
- google-cloud-platform - 带有 Google 负载平衡器的 Google Network Endpoint
- python - 使用 Python 抓取表格
- python - ValueError:在 PDF (Python/Flask) 上使用 open() 时嵌入空字节
- apache-kafka - 为什么 homebrew 的 zookeeper-server-start 可以与 kafka 服务器一起使用,但不能与 zkServer start 一起使用
- tensorflow - 深度学习(神经网络)挑战数据
- android - 附加到 Android MediaStore 中的文件
- reactjs - 反应仪表板问题
- node.js - 具有关系的架构未保存在数据库中
- r - 如何使用 plm 包的 cipstest 函数执行面板单位根测试和使用 pco 包的 pedroni99m 函数执行面板协整测试