提交表单后添加额外信息

时间:2010-07-21 09:43:56

标签: django forms

我有以下结构:

class FeatureType(models.Model):
    type = models.CharField(max_length=20)

    def __unicode__(self):
        return self.type

class Feature(models.Model):
    name = models.CharField(max_length=50)
    type = models.ForeignKey(FeatureType)
    premium = models.BooleanField("Premium Feature", default=False)

    def __unicode__(self):
       return self.name

我想要做的是当用户添加车辆时(应用程序用于车辆库存),有一个大文本框,用于通过用户复制和粘贴其他网站的功能列表那里。

到目前为止,我做得很好,但我不知道该怎么办,对于从文本框中解析的每个功能,用户都可以设置此功能所属的type。到目前为止,这是我的代码:

vehicle_form = VehicleForm(request.POST or None)
photos = PhotosFormSet(request.POST or None, request.FILES or None)
features = FeaturesForm(request.POST or None)
if vehicle_form.is_valid() and photos.is_valid() and features.is_valid():
   vehicle = vehicle_form.save(commit=False)
   vehicle.save()
   if features.cleaned_data['external']:
       external_set = features.cleaned_data['external'].split('\r\n')
       for feature in external_set:
           #set featuretype somehow
           vehicle_feature, created = Feature.objects.get_or_create(name=feature
                  , type = featuretype)
           feature = vehicle.features.add(vehicle_feature)
   photos = PhotosFormSet(request.POST, request.FILES, instance=vehicle)
   photos.save()

那么如何为每个功能选择功能类型?

理想情况下,我想要做的是将现有功能与记录匹配...对于那些不存在的功能,用户将被重定向到另一个视图,使他能够设置{{1对于每个新功能,然后将其添加到记录中。

更新1 我已经修改了一下代码,看起来像这样:

type

这需要获取现有功能....我现在要做的是在用户保存当前记录后将if features.cleaned_data['external']: new_features = [] external_set = features.cleaned_data['external'].split('\r\n') for feature in external_set: try: vehicle_feature = Feature.objects.get(external_name = feature) feature = vehicle.features.add(vehicle_feature) except Feature.DoesNotExist: new_features.append(feature) 中的所有功能传递到另一个表单,用户将在其中输入每个功能的进一步细节。

1 个答案:

答案 0 :(得分:1)

在FeaturesForm中,您可以添加以下内容:

feature_type = forms.ChoiceField(label="Feature Type",
                           choices=FeatureType.objects.values_list('id', 'type'))