2013-09-24 77 views
0

我有型號:如何從ManyToMany字段獲取值?

class SettingField(models.Model): 
    name = models.CharField(max_length=200) 
    value = models.TextField(max_length=200) 

    [...] 

class Setting(models.Model): 
    setting_type = models.CharField(max_length=1, choices=STYPES) 
    fields = models.ManyToManyField(SettingField, null=True) 

    [...] 

和形式:

class SettingsForm(forms.Form): 
    login = forms.CharField(
     required=True, 
     label=u'Login' 
     ) 
    password = forms.CharField(
     widget=forms.PasswordInput, 
     required=True, 
     label=u'Password' 
     ) 

鑑於我:

if request.method == 'POST': 
    form = SettingsForm(request.POST) 
    if form.is_valid(): 
     setting = Setting() 
     setting.setting_type = 'd' 
     setting.save() 
     for ff in form.fields: 
      setting_field = SettingField() 
      setting_field.name = ff 
      setting_field.value = form.cleaned_data[ff] 
      setting_field.save() 
      setting.fields.add(setting_field) 

該商店的依賴在窗體上的自定義字段設置。但現在我想要得到這些數據:

s_objs = Setting.objects.filter(setting_type='d') 

logins = list() 

for so in s_objs: 
    logins.append({ 
     "login": so.fields.??? what here ???, 
     "password": so.fields.??? what here ??? 
    }) 

怎麼辦?我可以使用循環和比較名稱,但也許有另一種方法。

回答

1

這會給你一個包含與此相關的所有字段的名稱和值的字典。

so.fields.all().values('name', 'value') 

你不想打分貝常常因此使用prefetch_related上s_objs:

s_objs = Setting.objects.filter(setting_type='d').prefetch_related('fields')