擅长:python、mysql、java
<p>对于案例1,您可以在模型的<code>clean</code>方法中轻松验证:</p>
<pre><code>from django.core.exceptions import ValidationError
class MyModel(models.Model):
...
def clean(self):
if self.call_me and not self.telephone.strip():
raise ValidationError('Telephone is required')
</code></pre>
<p>对于案例2,只有在模型被保存之后,M2M关系才会被添加,因此在模型上使用<code>clean</code>在这种情况下是行不通的。但是,您可以从您用来编辑它的任何<code>ModelForm</code>的<code>clean</code>方法中执行此操作,无论是在管理员还是您自己的视图中。在</p>
<p>然而,当唯一可能的值是“sale”和“rent”时,将<code>category</code>作为M2M是糟糕的设计。即使这样,“销售”和“租金”也是互斥的,所以M2M无论如何都是不合适的(你的模型永远不会同时经历“销售”和“租金”)。在</p>
<p>因此,将<code>category</code>设为<code>CharField</code>,其中{<cd8>}由“销售”和“租金”组成。如果您这样做,那么您可以使用模型的<code>clean</code>方法,方法与案例1相同。在</p>