【问题标题】:Foreign key fields in DjangoDjango中的外键字段
【发布时间】:2020-10-20 22:53:06
【问题描述】:

在不让用户从父模型中选择的情况下保存外键字段的最佳方法是什么? 假设我有这些模型

型号

class Category(models.Model):
    category_id = models.AutoFiled(primary_key=True)

class Brand(models.Model):
    brand_id = models.AutoFiled(primary_key=True)

class Product(models.Model):
    category = models.ForeignKey(Category)
    brand = models.ForeignKey(Brand)
    name = models.CharField(max_length = 10, blank=True)

表格

Class ProductForm(forms.ModelForm):
    class Meta:
        Model = Product
        fields = ['name']

观看次数

def create_product(request):
    if request.method == "POST":
        form = ProductForm(request.POST or None)
        if form.is_valid():
            form.save()
            messages.success(request, 'Successfully Saved!', 'alert-success')
            return redirect('products')
   else:
        return render(request, ' manageproducts/create_product.html', {'form':form})

我希望用户只输入一个名称,但在数据库中我想要一个表单来发布 category_id、brand_id 和名称。我该怎么做?

【问题讨论】:

  • 用户如何提前知道您的产品名称?在列表中?
  • 有一个表单用户输入产品名称

标签: django foreign-keys


【解决方案1】:

您可以尝试 HiddenInput 小部件,它将呈现为 <input type="hidden" ...>。但这需要一些js代码在表单提交之前提供正确的categorybrand

from django import forms

class ProductForm(ModelForm):
    class Meta:
        model = Product
        fields = ('category', 'brand', 'name')
        widgets = {
            'category': forms.HiddenInput(),
            'brand': forms.HiddenInput()
        }

更新

def update_product(request, pk=None):
    try:
        product = Product.ojbects.get(pk=pk)
    except Product.DoesNotExist:
        raise Http404

    form = ProductForm(request.POST or None, instance=product)
    if request.method == "POST":
        if form.is_valid():
            # category and brand will be unchanged
            form.save()
            messages.success(request, 'Successfully Saved!', 'alert-success')
            return redirect('products')
    else:
        return render(request, ' manageproducts/create_product.html', {'form':form})

不选择categorybrand只有更新才合理,创建新产品必须选择新的品类和品牌,否则会破坏Foreign Key Constraints p>

【讨论】:

  • 如何设置视图?
  • @EricksonKitoz 视图和之前一样,categorybrand 不会显示,但会与product name 一起提交,只需确保您的categorybrand存在于数据库中,否则,IntegrityError 将引发
  • @EricksonKitoz 如果你只提交product name,你怎么知道这个产品在前端属于哪个category and brand
  • 我以这些模型为例,我需要提交 fk 字段而无需用户选择
  • 我想将产品模型与类别和品牌模型相关联
猜你喜欢
  • 1970-01-01
  • 2011-11-16
  • 2019-06-29
  • 2014-08-24
  • 2017-03-30
  • 2016-09-12
  • 1970-01-01
  • 2019-01-22
  • 1970-01-01
相关资源
最近更新 更多