【发布时间】:2021-06-27 16:52:26
【问题描述】:
我有以下型号
class Supplier(models.Model):
supplierName = models.CharField(max_length=64)
zone = models.IntegerField()
class Contact(models.Model):
supplier = models.ForeignKey(Supplier, on_delete=models.SET("Company Deleted"), related_name="supplierC")
name = models.CharField(max_length=64)
关于html
<select name="supplier" id="supplier">
<option value="1">Supplier 1</option>
<option value="2">Supplier 2</option>
</select>
如果我选择供应商 1,并将表单发布到视图中,我将必须首先获取其id = 1 的供应商,然后使用获得的查询填充数据库以供联系
def contactForm(request):
if request.method == "POST":
supplier = Supplier.objects.get(pk=request.POST['supplier'])
mydata ={}
mydata['supplier'] = supplier
mydata['name'] = request.POST['contact-name']
new_contact = Contact(**mydata)
new_contact.save()
有没有办法避免supplier = Supplier.objects.get(pk=request.POST['supplier'])
例如在我们的模型中做类似supplier = models.ForeignKey(Supplier.id, on_delete=models.SET("Company Deleted"),
在为Contact创建新记录的时候,我们直接如下所示进行
def contactForm(request):
if request.method == "POST":
mydata ={}
mydata['supplier'] = request.POST['supplier']
mydata['name'] = request.POST['contact-name']
new_contact = Contact(**mydata)
new_contact.save()
有什么帮助吗?
【问题讨论】:
-
使用
mydata['supplier_id'] = request.POST['supplier']。对于外键,Django 会自动创建一个虚拟字段(附加_id),它实际上包含相关的 id。尽管我建议您实际使用表单类。见Creating forms from models - Django docs -
@AbdulAzizBarkat 谢谢它的帮助