안녕,장고 관리자 : 업데이트는 인라인 나는 제품을 추가하기위한 양식을 만든
관리자 패널에서 다른 인라인에 따라. 제품과 관련된 일부 모델이 있으므로 양식에 2 개의 인라인 양식 세트가 포함됩니다. 사용자는 제품을 생성 한 다음 다른 속성이있는 해당 제품의 변형을 정의 할 수 있습니다. 나는 이것을 예제로 설명 할 것이다. 사용자는 3 가지 색상의 한 브랜드 티셔츠를 가지고 있으며 다른 가격으로 추가하려고합니다. 티셔츠는 3 가지 변형 된 제품으로 만들어집니다.
class Detail(models.Model):
product = models.ForeignKey('Product')
attribute = models.ForeignKey('Attribute')
value = models.CharField(max_length=500)
class Attribute(models.Model):
name = models.CharField(max_length=300)
class Variant(models.Model):
product = models.ForeignKey(Product)
details = models.ManyToManyField(Detail)
quantity = models.IntegerField()
price = models.DecimalField(max_digits=6, decimal_places=2)
생략 한 제품은 관계가 없습니다.
class DetailInline(admin.TabularInline):
model = Detail
class VariantInline(admin.StackedInline):
model = Variant
class ProductAdmin(admin.ModelAdmin):
class Meta:
model = Product
inlines = [DetailInline, VariantInline]
잘 작동하고 모델이 잘 저장되어 있습니다. 변형 인라인에 문제가 있습니다. 변형 인라인은 데이터베이스에 이미 저장된 객체 만 표시합니다. 사용자의 삶을 더 편하게하려면 상세 오브젝트가 생성 될 때 Variant 인라인에 Detail 오브젝트를 추가하는 것이므로 Product가 저장되기 전에 발생해야합니다.
- 값이있는 인라인을 수동으로 새로 고치는 방법이 있습니까?
- Detail 개체를 만드는 데 사용할 수있는 중간 저장은 있습니까?하지만 Product가 아닌 결과를 얻으려면 사용할 수 있습니까?
- 모델을 다시 디자인해야합니까? (필자가하지 않는 한이 작업을 정말로하고 싶지는 않습니다.)
- 제품을 추가하기 위해 사용자가 따라야 할 다른 워크 플로우가 있습니까?
js를 사용하여 인라인으로 항목을 주입하려고 시도했지만 hackish이고 Django가 잘못된 값을 선택했다는 오류를 던지는 가짜 값으로 formset의 유효성을 검사하지 않았습니다.
이 질문을 쓰는 동안 내 마음에 온 마지막 생각. 인라인 형식의 Object가 변경되면 데이터를 사용자 정의보기로 전달하여 객체를 만들고 결과로 돌아갈 수있는 j를 만들 수 있습니다. 하나의 문제는 내가 옳다고 느끼지 않는 것입니다. 새로운 객체가 생성되었다는 사실을 django에 알려서 기존 값이 아닌 것에 대한 오류를 발생시키지 않게하는 방법입니다.
어쨌든 나는 누군가가이 긴 질문을 이해하기를 바랍니다.
특정 이유에 대해 Variant 대신 Detail to Product를 연결하고 있습니까? –
예. js로 데이터를 필터링하는 데 사용됩니다. –