0

私は次のモデルを持っています:

class Device(models.Model):
    device_name = models.CharField(max_length=50L, blank=True)
    hostname = models.CharField(max_length=255L, blank=True)
    ip = models.CharField(max_length=255L, blank=True)
    vendor = models.CharField(max_length=255L, blank=True)
    model = models.CharField(max_length=255L, blank=True)
    town = models.CharField(max_length=255L, blank=True)
    ...
class Group(models.Model):
    device = models.ManyToManyField(Device)
    group_name = models.CharField(max_length=255L, blank=True, unique=True)

デバイス テーブルには 30000 を超えるレコードが含まれており、グループには 5000、10000、およびそれ以上のデバイスを保持できます。

する必要がある:

  1. デバイスをグループに追加します。
  2. グループの内容を表示する。
  3. グループ全体の編集 (デバイスの削除)。

標準ツール ( filter_horizontal、インライン、raw_id_fields) は適切ではありません。フォームの編集Groupは、すべてのデバイス レコードを取得するため、動作が非常に遅いためです。必要なデバイスを選択するには、より多くの情報 (モデル、メーカー、場所など) が必要です。グループから必要なデバイスを削除するには、30000 デバイスのリストをスクロールするか、グループ内の 7000 デバイスをスクロールして CTRL キーを使用して削除する必要があります。この方法は適用されません。

グループにデバイスを追加する際の問題 デバイスにカスタム アクションを追加することで解決しました (を使用してlist_filtersearch_fields正しい結果が得られたら、「グループに追加」アクションを実行します)。

私が見つけていない残りの問題。

この方法で問題を解決したい: ユーザーがグループに入り、グループのタイトルが表示されます。グループの名前をクリックすると、そのグループに属するデバイスのリストが、すべてのデバイス フィールドを含むテーブルとして表示されます。

これはどのように達成できますか?

4

1 に答える 1

1

簡単な答え: 管理サイトは使用しないでください。

長い答え: 管理サイトは素晴らしいです。パワフルできちんとしていて、数分で簡単に設定できます。しかし、それはそれについてです。高度にコスチューム化されたプロジェクトに使用することを意図していないため、それは問題ありません. はい、デフォルトの代わりに使用する、または別の方法で表示する管理サイト用のコストフォームを作成する方法がいくつか組み込まれていますが、それでもそれほど柔軟ではありません

私の見方では、次の 2 つのオプションがあります。

  1. 管理サイトのファイルをプロジェクトにコピーし、その仕組みを学び、ニーズに合わせてカスタマイズします

  2. 管理サイトを使用せず、独自のビューを作成してください。

最初のアイデアが気に入ったように見えるかもしれませんが、私の経験では、2 番目のアイデアの方が常に簡単です。管理サイトを使用するのは魅力的ですが、そのようなものを自分で作成するのはそれほど複雑ではありません。それがどのように見えるかの一般的な説明は次のとおりです。

url('^myadmin/$', 'myapp.views.main_admin'),
url('^myadmin/(?P<group_pk>\d+)/$', 'myapp.views.admin_devices')

次に、「main_admin」でグループのリストを表示し、「admin_devices」でデバイスのリストとその情報をテーブルに表示します。

ビュー.py

def admin_devices(request, group_pk)
    group = Group.objects.get(group_pk)
    devices = group.device.all()

    return render_to_response('devices.html', {'devices': devices})

テンプレート

<table>
<tr>
    <th>device name</th>
    <th>host name</th>
    <th>ip</th>
    ... and so on...
<tr>
{% for device in devices %}
    <tr>
        <td>{{ device.device_name }}</td>
        <td>{{ device.host_name }}</td>
        <td>{{ device.ip }}</td>
                    .... and so on...
    </tr>
{% endfor %}
</table>

各グループに画像を与えたり、グループのすべてのリンクに素敵な UI を与えたりできるため、管理サイトのデフォルトの外観よりもはるかに見栄えがよくなります。いくつかのテーマ。管理サイトで可能なすべての機能を簡単に実装できる jQuery パッケージがたくさんあります。列の並べ替え (Datatables)、簡単な日付の追加 (jQuery UI)、さらにはインプレース編集 (jEditable) で、管理サイトをさらに簡単にします。あなたのユーザー

于 2013-08-06T12:21:41.020 に答える