Python Django–;至少需要一个多通模型实例
在(首次)保存模型时,是否可能要求模型至少有一个多实例?其想法是,拥有一个可以有价格历史记录的产品(希望使用一个单独的、松散耦合的模型,这是正确的方法);因此,要添加产品,至少需要一个价格。Python Django–;至少需要一个多通模型实例,python,django,django-models,Python,Django,Django Models,在(首次)保存模型时,是否可能要求模型至少有一个多实例?其想法是,拥有一个可以有价格历史记录的产品(希望使用一个单独的、松散耦合的模型,这是正确的方法);因此,要添加产品,至少需要一个价格。 我读到,将这种验证放入clean比save更明智,因为ValidationError不是从后者产生的,它只是“按惯例更好”。不过,对于这两种方法,我们还不能100%确定界限在哪里 目前正试图让它与Django管理员一起工作;代码如下所示 # models.py class Product(models.Mo
我读到,将这种验证放入
clean
比save
更明智,因为ValidationError
不是从后者产生的,它只是“按惯例更好”。不过,对于这两种方法,我们还不能100%确定界限在哪里
目前正试图让它与Django管理员一起工作;代码如下所示
# models.py
class Product(models.Model):
name: str = models.CharField(max_length=128)
def clean(self):
if self._state.adding:
if not self.prices.count():
raise ValidationError({
'prices': ('At least one product price is required'),
})
class ProductPrice(models.Model):
product: Product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='prices')
price: float = models.FloatField()
created: datetime = models.DateTimeField(auto_now_add=True)
# admin.py
class ProductPriceInline(admin.TabularInline):
readonly_fields = ('created',)
model = ProductPrice
extra = 3
can_delete = False
@admin.register(Product)
class ProductInline(admin.ModelAdmin):
model = Product
verbose_name = 'Product'
inlines = [ProductPriceInline,]
获取ValueError ProductForm没有名为prices的字段。我也尝试过在产品上使用约束(模型.CheckConstraint(check=~Q(prices=None),name='ather_least_1_non_null'),]
),但我真的被所有不同的解决方案所淹没,找到了正确的解决方案和/或找到了如何解决当前解决方案的问题。除了这里的主要问题之外,我很高兴有任何建议
编辑:在旁注上–刚刚意识到clean
方法将始终返回带0的self.prices.count()
,因为ProductPrice
实例仅在创建Product
之后创建,因此前者可以引用