我有一个发票主模型及其管理员。在发票明细(内联)中,我希望从产品表中选择不同的产品,即在每个发票明细中,我不应该允许选择之前选择的产品。我可以获得它的示例代码吗?关系定义: models.py:
class InvoiceHeader(models.Model): #model
number ....
class InvoiceDetail(models.Model):
header = models.ForeignKey(InvoiceHeader)
products = models.ManyToManyField(Product,related_field="products")
admin.py:
class InvoiceDetailForm(forms.ModelForm):
form = InvoiceDetailForm
def __init__(self, *args, **kwargs):
super(InvoiceDetailForm, self).__init__(*args, **kwargs)
# Below statement to be changed:
self.fields['products'].queryset = Product.objects.exclude(
name__exact=self.instance.invoicedetail.products.all()
class InvoiceDetailInline(admin.StackedInline):
extra = 1
class Meta:
model = InvoiceDetail
class InvoiceHeaderAdmin(admin.ModelAdmin):
class Meta:
model = InvoiceHeader
inlines = ['InvoceDetailInline']
仅使用django 1.6 当我在InvoiceDetailInline中选择产品A时,在其下一个内联表单中,我不能选择产品A.应该允许选择产品B. 我可以在这个场景中使用一些javascript或jquery。我需要完整的详细资料,因为我不擅长。请尽快恢复并强制
答案 0 :(得分:0)
第一个答案是错误的,因为我误解了你的问题。我花时间分析你的问题,并提出了这些文件:
<强> models.py 强>
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=50, unique=True)
def __str__(self):
return self.name
class InvoiceHeader(models.Model):
number = models.IntegerField(unique=True)
def __str__(self):
return str(self.number)
class InvoiceDetail(models.Model):
header = models.ForeignKey(InvoiceHeader, related_name='invoicedetail')
products = models.ManyToManyField(
Product,
related_name='invoicedetail')
def __str__(self):
return '{0}, {1}'.format(self.header, self.products.all())
<强> admin.py 强>
from django.contrib import admin
from django.forms import ModelForm
from invoice.models import Product
from invoice.models import InvoiceHeader
from invoice.models import InvoiceDetail
class ProductAdmin(admin.ModelAdmin):
model = Product
class InvoiceDetailAdmin(admin.ModelAdmin):
model = InvoiceDetail
class InvoiceDetailInline(admin.StackedInline):
model = InvoiceDetail
extra = 1
class InvoiceHeaderAdmin(admin.ModelAdmin):
model = InvoiceHeader
inlines = [InvoiceDetailInline]
admin.site.register(Product, ProductAdmin)
admin.site.register(InvoiceDetail, InvoiceDetailAdmin)
admin.site.register(InvoiceHeader, InvoiceHeaderAdmin)
我试图在我看来填补缺失的部分。如果您尝试这些文件,则可以在管理区域中添加InvoiceHeader,并为InvoiceDetail添加内联选择框。您可以按&#34;添加另一个发票明细&#34;用于另一个内联选择框等。在这里,您不希望为同一发票标题号选择相同的产品。我理解你了吗?
我们假设您有以下发票标题:
以及以下产品:
您可以制作以下发票明细:
但不应该有以下内容:
我希望我的假设是正确的。
因此,在管理区域的内联选择框中,您仍然可以选择产品,但您可以编写自己的验证规则,以防止保存。
也许我可以给你一些进一步的建议。如果你能确认我的例子适合到目前为止会很好。