2011-12-17 4 views
0

Я создаю приложение Django, в котором мне нужно представлять пол (мужчина/женщина) для всех пользователей. Один пользователь может выбрать, что они интересуются мужчинами, женщинами или и тем, и другим. Эти данные затем будут использоваться для перекрестных ссылок с другими пользователями, чтобы найти сходство. ManytoManyField для пола будет явно работать, но поскольку пол - довольно статическое поле, которое будет иметь только два варианта, есть ли лучший способ реализовать это? Есть ли какое-то поле с возможностью множественного выбора, которое не требует, чтобы база данных подслушивала поле m2m?Альтернативы ManytoManyField для статических/жестко закодированных данных?

+0

, как говорят ответы, 'выборы' - это то, что вы хотите. но на самом деле 'выборы' работают только вместо' ForeignKey'. что, если человек и мужчина и женщина? – Jayen

ответ

2

Определенно уклоняются от M2M - это будет дорого обойтись и просто трудно запросить в течение долгого времени с тоннами двойного подчеркивания нотации. Для статического материала вы специально хотите choices.

Одним из наиболее полезных кодирования практики, которые я узнал за эти годы идея от Джеймс Беннет блога как он использует выбор: http://www.b-list.org/weblog/2007/nov/02/handle-choices-right-way/

В принципе, пусть позволяет это сделать:

class MyObject(models.Model): 
    MALE = 0 
    FEMALE = 1 
    ROBOT = 2 
    MY_CHOICES = [ 
     (MALE, 'Male'), 
     (FEMALE, 'Female'), 
     (ROBOT, 'Robot'), 
    ] 
    gender = models.IntegerField(choices=MY_CHOICES) 


MyObject.objects.filter(gender=MyObject.ROBOT) 
0

вы можете хранить строку или Int, и ограничить возможные значения с помощью choices

+1

В качестве альтернативы вы можете использовать два булевых поля: интерес к мужчинам и женщинам. У вас может быть небольшая настройка формы, чтобы он был более удобным для пользователя, но я думаю, что это имеет больше смысла с точки зрения БД. –

Смежные вопросы