【问题标题】:How can I link the column of a model to another using Django ForeignKey如何使用 Django ForeignKey 将模型的列链接到另一个
【发布时间】: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 谢谢它的帮助

标签: django forms sqlite model


【解决方案1】:

您可以使用Supplier 的id 值将supplier_id 参数传递给Contact 创建,而无需事先从数据库中查询它。

def contactForm(request):
    if request.method == "POST":
        mydata ={}
        mydata['supplier_id'] = request.POST['supplier']
        mydata['name'] = request.POST['contact-name']
        new_contact = Contact(**mydata)
        new_contact.save()

【讨论】:

    猜你喜欢
    • 2020-12-14
    • 2017-01-31
    • 2019-07-11
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    • 2018-06-17
    相关资源
    最近更新 更多