簡體   English   中英

我如何為帶有django中帶有“添加項”選項的下拉菜單的外鍵字段創建表單?

[英]How would I create a form for a foreign key field that has a drop down menu with an 'add item' option in django?

我將從模型字段開始:

class Store(models.Model):
    name = models.CharField(max_length=250)

    def __str__(self):
        return self.name


class Product(models.Model):
    type = models.CharField(max_length=250)

    def __str__(self):
        return self.type


class Receipt(models.Model):
    store = models.ForeignKey(Store)
    date = models.DateField()
    line_items = models.ManyToManyField(Product, through='ReceiptProduct')

    def __str__(self):
        return self.store.name + ': ' + str(self.date)


class ReceiptProduct(models.Model):
    receipt = models.ForeignKey(Receipt)
    product = models.ForeignKey(Product)
    price = models.FloatField()
    description = models.CharField(max_length=500, null=True, blank=True)

    def __str__(self):
        return self.product.type  

我想做的是為ReceiptProduct模型創建一個表單。

class AddItemForm(ModelForm):
    class Meta:
        model = ReceiptProduct
        fields = ['product', 'price', 'description']

做完了 和看法?

def add_receipt_product(request, receipt_id):
    current_receipt = Receipt.objects.get(id=receipt_id)
    if request.method != 'POST':
        # No data submitted; create a blank form.
        form = AddItemForm(initial={'receipt': current_receipt})
    else:
        # POST data submitted; process data.
        form = AddItemForm(data=request.POST)
        if form.is_valid():
            new_product = form.save(commit=False)
            new_product.receipt = current_receipt
            new_product.save()
            return HttpResponseRedirect(reverse('purchase_log:receipt_details', args=[receipt_id]))

    context = {'current_receipt': current_receipt, 'form': form}
    return render(request, 'purchase_log/add_receipt_product_form.html', context)  

好的,所以我想做的是,在“產品”字段(這是產品模型填充的下拉菜單)下,有一個名為“定制產品”的選項,用戶可以選擇將產品添加到產品模型中,然后將出現在以后的下拉菜單中。 這可行嗎?
謝謝大家先進!

Django 通過“ formset”來實現這一點。 請查看此教程以獲取更多信息: http : //whoisnicoleharris.com/2015/01/06/implementing-django-formsets.html我認為那里的示例與您的示例非常相似。

在Django管理界面中,事情有些簡單,您可以使用Inline

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM