0

Django-Classifiedsというアプリを統合しようとしていますが、一部の要素を操作する方法がわかりません。

このアプリでは、管理セクションを介してカテゴリとサブフィールドを作成できます。これにより、表示され、ユーザーはそのカテゴリ内で投稿を作成できます。Django 管理者はフィールドの作成を許可していますが:

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ですか?

どんな例でも感謝します。ありがとうございました。

4

1 に答える 1

1

AdForm クラスの目的はこれらのフィールドへのアクセスを許可することなので、ModelForm を組み込む必要はありません。データベースのカテゴリに追加されたカスタム フィールドを表示するには、適切なカテゴリのテンプレートにフィールドを追加するだけです (アプリで提供されているビューを使用していると仮定します)。クラシファイド アプリ内の「ベース」カテゴリ テンプレートには、この例があります。

于 2012-05-25T17:43:26.777 に答える