Django-Classifiedsというアプリを統合しようとしていますが、一部の要素を操作する方法がわかりません。
このアプリでは、管理セクションを介してカテゴリとサブフィールドを作成できます。これにより、表示され、ユーザーはそのカテゴリ内で投稿を作成できます。Django 管理者はフィールドの作成を許可していますが:
そしてそれらをデータベースに書き込みます:
これらのフィールドを呼び出してユーザーに表示する方法がわかりません。現在、タイトル フィールドのみが表示されます。ModelForm を使用するとこれらの要素にアクセスできることは理解していますが、それを BaseForm に組み込む方法がわかりません (以下のようにアプリで使用されます)。
class AdForm(BaseForm):
def __init__(self, instance, data=None, files=None, auto_id='id_%s', prefix=None,
initial=None, error_class=ErrorList, label_suffix=':',
empty_permitted=False):
self.instance = instance
object_data = ad_to_dict(self.instance)
self.declared_fields = SortedDict()
self.base_fields = fields_for_ad(self.instance)
# if initial was provided, it should override the values from instance
if initial is not None:
object_data.update(initial)
BaseForm.__init__(self, data, files, auto_id, prefix, object_data,
error_class, label_suffix, empty_permitted)
def save(self, commit=True):
if not commit:
raise NotImplementedError("AdForm.save must commit it's changes.")
if self.errors:
raise ValueError("The ad could not be updated because the data didn't validate.")
cleaned_data = self.cleaned_data
# save fieldvalues for self.instance
fields = field_list(self.instance)
for field in fields:
if field.enable_wysiwyg:
value = unicode(stripHTML(cleaned_data[field.name]))
else:
value = unicode(cleaned_data[field.name])
# strip words in settings.FORBIDDEN_WORDS
for word in settings.FORBIDDEN_WORDS:
value = value.replace(word, '')
# title is stored directly in the ad, unlike all other editable fields
if field.name == 'title':
self.instance.title = value
self.instance.save()
else:
# check to see if field.fieldvalue_set has a value with ad=self.instance
try:
# if it does, update
fv = field.fieldvalue_set.get(ad=self.instance)
except FieldValue.DoesNotExist:
# otherwise, create a new one
fv = field.fieldvalue_set.create(ad=self.instance)
# XXX some ugly price fixing
if field.name.endswith('price'):
m = re.match('^\$?(\d{1,3},?(\d{3},?)*\d{3}(\.\d{0,2})?|\d{1,3}(\.\d{0,2})?|\.\d{1,2}?)$', value)
value = m.group(1)
value.replace(',', '')
value = '%.2f' % float(value)
fv.value = value
fv.save()
return self.instance
上記で作成されたすべてのフィールドを表示するにはどうすればよいAdForm
ですか?
どんな例でも感謝します。ありがとうございました。