我有以下结构:
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)
中的所有功能传递到另一个表单,用户将在其中输入每个功能的进一步细节。
答案 0 :(得分:1)
在FeaturesForm中,您可以添加以下内容:
feature_type = forms.ChoiceField(label="Feature Type",
choices=FeatureType.objects.values_list('id', 'type'))