Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 清理内联实例_Python_Django_Django Forms_Django Orm - Fatal编程技术网

Python 清理内联实例

Python 清理内联实例,python,django,django-forms,django-orm,Python,Django,Django Forms,Django Orm,考虑这些伪模型: class Category(models.Model): name = models.CharField() class Product(models.Model): name = models.CharField() code = models.CharField() category = models.ForeignKey(Category) price = models.DecimalField() stock = mo

考虑这些伪模型:

class Category(models.Model):
    name = models.CharField()

class Product(models.Model):
    name = models.CharField()
    code = models.CharField()
    category = models.ForeignKey(Category)
    price = models.DecimalField()
    stock = models.IntegerField()

class AlternativeProduct(Product):
    original_product = models.ForeignKey(Product, related_name="alternative", editable=False)
我希望使用内联线能够快速添加产品及其替代选项,而无需输入重复数据(仅代码、股票和价格)

admin.py

class AlternativeProductInline(admin.TabularInline):
    model = AlternativeProduct
    formset = AlternativeProductInlineFormset
    fk_name = "original_product"
    fields = ["code", "price", "in_stock"]
    max_num = 1
    extra = 0


class ProductAdmin(admin.ModelAdmin):
    form = ProductAdminForm
    inlines = [AlternativeProductInline]
当然,这将引发
验证错误
,因为
替代产品
缺少一个
类别

现在我可以设置一个默认值来修复该问题:

class Product(models.Model):
    name = models.CharField()
    code = models.CharField()
    category = models.ForeignKey(Category, default=1)
    price = models.DecimalField()
    stock = models.IntegerField()
但是除了这个id可能不存在之外,它还需要被更正。是否有其他方法(除了Javascript)将正版产品的类别值复制到引擎盖下的替代内联产品“”中


我曾尝试更改admin_视图,但它变得很粗糙,也许自定义视图将是一个很好的解决方案,尽管javascript是一种耗时较少的方法。

javascript似乎是实现这一点的简单方法

$(document).ready(function(){
    $('#alternative-group thead th:nth-child(2)').hide();
    $('#alternative-group tbody td:nth-child(1) p').hide();
    $('#alternative-group tbody td:nth-child(3)').hide();
    $('#id_alternative-0-category').hide();

    var product_category = $('#id_category option:selected').val();
    $('#id_alternative-0-category').val(product_category);

    $("#id_category").change(function() {
        product_category = $('#id_category option:selected').val();
        $('#id_alternative-0-category').val(product_category);
    });
});

我对您的代码片段有点困惑,尤其是
models.py
。你确定在翻译成“伪”模型的过程中没有损失什么吗?特别是,您在
AlternativeProduct
上引用的字段似乎不存在。对不起,打字错误,AlternativeProduct源自产品
Product
AlternativeProduct
之间有什么区别?现在,它们似乎不应该是两个独立的型号。假设db中有10个OEM产品,每个产品都可以有一个替代品牌产品,除了库存和价格外,其他都完全相同。因为这两个产品实际上是绑定在一起的,所以我不想为这两个产品填写完整的表格(因此工作量是原来的两倍)。这样做似乎不那么费时。我一开始把价格和股票分开(用一个选项字段定义真品/替代品),这很有效,但感觉非常不切实际。