簡體   English   中英

Django模型-相關對象驗證

[英]Django models - related objects validation

我想知道如何對相關對象進行驗證。 令我驚訝的是,我還沒有找到很多相關的信息。

例如:

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是' sale ',必須設置price_sale否則將其設置為null?
  • 如何確保至少插入了一張image ,但插入的image不超過10張?

我認為這應該在模型中完成,以防萬一我選擇輸入除表單之外的數據(類似於解析提要),這是正確的嗎? 我嘗試處理clean()但在我處理m2m關系等之前,它需要PK。

額外的問題:為什么我會選擇使用限制而不是FK限制字段?

嘗試顯式創建映射表,並讓您的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/zh-CN/1.3/topics/db/models/#intermediary-manytomany

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM