2015-06-21 2 views
2

Предположим, у меня есть следующие модели Django:Как конвертировать выбор строки Джанго Modelfield дорожить

class myModel(models.Model): 
    C = "myC" 
    D = "myD" 

    A = models.CharField(max_length=254, null=False, blank=False,) 
    B = models.CharField(
     max_length=254, 
     null=False, 
     blank=False, 
     choices=((C, "C"), (D, "D")), 
    ) 

    def set_B(self, choice_val): 
     self.B = #WHAT GOES HERE?? 
     self.save() 

Теперь предположим, что я создаю объект X типа MyModel. Затем я звоню X.set_B("D"). Я хочу, чтобы метод myModel set_B() устанавливал значение B на myModel.D. Как я могу это сделать? Какой код мне нужно поставить в set_B() так, чтобы он преобразует человекочитаемое значение «D» в myModel.D?

+0

Что такое 'C' в' (C, "C"), (D, "D") ', потому что вы продолжаете говорить' myModel.D', как будто 'D' является свойством' myModel', но я не вижу в нем нигде. –

ответ

1

Вы можете просто использовать getattr Funtion.

class myModel(models.Model): 

A = models.CharField(max_length=254, null=False, blank=False,) 
B = models.CharField(
    max_length=254, 
    null=False, 
    blank=False, 
    choices=((C, "C"), (D, "D")), 
) 
C = #Something 
D = #Something 

def set_B(self, choice_val): 
    self.B = getattr(self,choice_val) 
    self.save() 

getattr функция возвращает значение атрибута choice_val.

1

Вы можете построить просмотровые dict на уровне класса и использовать его:

class MyModel(models.Model): 

    B_CHOICES = ((C, "C"), (D, "D")) 
    B_VALUES_FROM_NAME = {name: val for val, name in B_CHOICES} 
    B = models.CharField(
     max_length=254, 
     null=False, 
     blank=False, 
     choices=B_CHOICES, 
    ) 

    def set_B(self, name): 
     self.B = MyModel.B_VALUES_FROM_NAME[name] 
     self.save() 
Смежные вопросы