2016-12-20 4 views
0

にモデルのフィールドを取得しますか?私がMyModel._meta.get_fields()と呼ぶとき、彼らは順番が来ません(あなたがあなたがそう思われるサーバをリセットしない限り、同じ '順序付けられていない'オーダーです)。私はフォームhttps://docs.djangoproject.com/en/1.9/ref/forms/api/#django.forms.Form.order_fieldsで注文について読んだDjangoはコード順にそれらを取得、またはDjangoのモデルのフィールドの順序を設定する方法はあり順

のいずれかの方法上書きの基本LIBを変更することなく、可能な場合は

、ではなく、モデル自体

メタプロパティ「発注」は定義でクエリ

+0

テーブルに存在するのと同じ順序でフィールドを取得できるかどうか尋ねていますか?つまり、あなたがSELECT *をしたのと同じオーダーですか?なぜあなたはそれを望んでいますか?何か役に立つものではありません。 – e4c5

+0

私は私が_meta.get_fieldsの注文を()を定義することを可能にするドキュメントに何かがあるかどうかを知りたいe4c5 @ – Mojimi

答えて

2

実際にget_fields()は、ののフィールドを返します。私はこのコードを繰り返し、同じ結果を持っている

>>> from django.contrib.auth.models import User 
>>> User._meta.get_fields() 
(<ManyToOneRel: admin.logentry>, 
<django.db.models.fields.AutoField: id>, 
<django.db.models.fields.CharField: password>, 
<django.db.models.fields.DateTimeField: last_login>, 
<django.db.models.fields.BooleanField: is_superuser>, 
<django.db.models.fields.CharField: username>, 
<django.db.models.fields.CharField: first_name>, 
<django.db.models.fields.CharField: last_name>, 
<django.db.models.fields.EmailField: email>, 
<django.db.models.fields.BooleanField: is_staff>, 
<django.db.models.fields.BooleanField: is_active>, 
<django.db.models.fields.DateTimeField: date_joined>, 
<django.db.models.fields.related.ManyToManyField: groups>, 
<django.db.models.fields.related.ManyToManyField: user_permissions>) 

はジャンゴexampleに見てみましょう。あなたがより深く行くとsourcesになります 場合は、順序は次のようであることがわかります:再帰的な方法でフェッチ

  1. parentフィールドを。
  2. リモートフィールド。
  3. ローカルフィールド。
  4. ローカルの多対多フィールド。
  5. プライベートフィールド。あなたは、モデル内の他のいくつかの些細なフィールドの前にいくつかの些細なフィールドを定義する場合、あなたは常にget_fields()結果に同じ順序でそれを得るだろうと述べている

すべて。

しかし、それは何の警告もなしに、将来的に変更されることができるように、非文書化行動に頼るに注意してください。

+0

私のテストからは、彼らがで来るのか同じ注文ですが、特定の注文はありません。しかし、サーバーを再起動するとこの順序が変わります – Mojimi

+0

テストコードを提供できますか? – vasi1y

+0

あなたは正しかった、私の間違いは何か他のものだった、私はそれらを順序付けしていない別の辞書に結果を入れた – Mojimi

-2

を行う際に、オブジェクトのデフォルトの順序は、単にクラスのメタに「順序」を追加します。

class Model(models.Model): 
    slug = models.SlugField() 
    name = models.CharField(max_length=30) 
    other_field = models.TextField(blank=True, null=True) 


    class Meta: 
     ordering = ('name',) 

https://docs.djangoproject.com/en/1.10/ref/models/options/#ordering

+1

うわー、私は私がすることを逃したことを恥ずかしく感じ、感謝! – Mojimi

+1

が私たちの最高に起こる;) – whieronymus

+1

は、実際に私はちょうどこれが答えではない実現し、これは、クエリ内のオブジェクトのデフォルトの順序を定義し、フィールドのないようにするためには(_meta.get_fieldsから取得) – Mojimi

関連する問題