2012-03-05 4 views
3

Как я могу получить зависимость от поля?Модели Django - зависимость от полей

Случай 1: Если логическое поле call_me установлено, то telephone должен быть установлен, в противном случае он должен быть пустым

Случай 2: Если многие ко многим поля category (со значениями продажи, аренды) имеет один из значений как продажи, то price_sale должен быть установлен, в противном случае он должен быть пустым

+2

Похоже, что у вас плохо оформлены модели. Попробуйте нормализовать схему базы данных. – cha0site

+0

Какая часть его кажется неправильной? – RS7

ответ

4

Для случая 1, вы можете проверить, что легко в clean методы модели:

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') 

Для случая 2, М2М отношения не добавляют до после модель не сохраняется, поэтому использование clean на вашей модели не будет работать в этом сценарии. Однако вы можете сделать это с помощью метода clean любого ModelForm, который вы используете для его редактирования, будь то в администраторе или в вашем собственном представлении.

Однако, имея category как M2M, когда единственными возможными значениями являются «продажа» и «аренда», это плохой дизайн. Даже тогда «продажа» и «аренда» являются взаимоисключающими, поэтому M2M неуместно в любом случае (ваша модель не будет одновременно испытывать как «продажу», так и «ренту»).

В результате было бы лучше иметь categoryCharField с choices, состоящий из «продажи» и «аренды». Если вы это сделаете, вы можете использовать метод вашей модели clean так же, как и Case 1 для этого.

+0

Благодарим вас за ответ - для случая 2 «категории» могут быть продажами, арендой и/или отпуском, поэтому я предполагаю, что мне понадобится таблица соединений. Как я могу потребовать хотя бы одну строку в поле M2M? Как насчет зависимости от случая 2? (Я довольно новичок в Python/Django) – RS7

0

Случай 1:

Не делайте это так, есть различные таблицы для телефонных номеров и имеет ForeignKey от лица (я предполагаю, что это человек) на номер телефона. Если у вас более одного номера телефона на человека, сделайте это наоборот, иначе подумайте об использовании OneToOne.

Очевидно, что вы хотите, чтобы ForeignKey был нулевым. Таким образом, единственный способ иметь номер телефона - это тот, который предоставил человек.

Случай 2:

Я не понимаю вашего проекта базы данных, поэтому я не могу ответить. Вам нужно будет объяснить больше - зачем вам нужен ManyToMany?