我想知道如何对相关对象进行验证。令我惊讶的是,我没有找到相关的相关信息。
例如:
class Listing(models.Model):
categories = models.ManyToManyField('Category')
price_sale = models.DecimalField(max_digits=8, decimal_places=0, null=True)
price_rent = models.DecimalField(max_digits=8, decimal_places=0, null=True)
price_vacation = models.DecimalField(max_digits=8, decimal_places=0, null=True)
class Category(models.Model):
value = models.CharField(max_length=32)
class Image(models.Model):
listing = models.ForeignKey('Listing')
image = models.ImageField(upload_to=get_file_path)
category
,没有设置categories
列表是否重复?price_sale
之一是' sale ',我必须确定image
必须设置或设置为空?clean()
但不多
比说10张图片?我认为这应该在模型中完成,以防我选择输入表单之外的数据(比如解析一个feed),这是正确的吗?我试过处理{{1}},但在让我处理m2m关系等之前需要PK。
奖金问题:为什么我会选择使用选择限制字段而不是限制FK?
答案 0 :(得分:0)
尝试显式创建映射表,并让您的ManyToMany关系转到through
此模型。由于它是一个普通的Django模型,因此您应该能够在clean
方法中定义大部分验证逻辑。
class Listing(models.Model):
categories = models.ManyToManyField('Category', through='CategoryListing')
price_sale = models.DecimalField(max_digits=8, decimal_places=0, null=True)
price_rent = models.DecimalField(max_digits=8, decimal_places=0, null=True)
price_vacation = models.DecimalField(max_digits=8, decimal_places=0, null=True)
class Category(models.Model):
value = models.CharField(max_length=32)
class CategoryListing(models.Model):
category = models.ForeignKey(Category)
listing = models.ForeignKey(Listing)
def clean(self):
# validation logic
https://docs.djangoproject.com/en/1.3/topics/db/models/#intermediary-manytomany