1
のクラスを取得し、私はのManyToManyFieldの空のクエリセットを返すために必要がありますが、私は 受信「はAttributeError: 『をReverseManyRelatedObjectsDescriptor』オブジェクトが 『どれも』は属性を持っていない」は、以下の単純化モデルを考えるのManyToManyField
class AnimalFamily(models.Model):
objects = GetOrNoneManager()
siblings = objects.none()
class Countable(models.Model):
@classmethod
def get_peers(cls_obj,target_animal):
animals = cls_obj.objects.get_or_none(siblings=target_animal)
if animals:
return animals.siblings.exclude(id=target_animal.id)
else
return cls_obj.siblings.none() # <--- this fails <----
class Meta:
abstract = True
class BearFamily(AnimalFamily,Countable):
siblings = models.ManyToManyField(Bear)
class GiraffeFamily(AnimalFamily,Countable):
siblings = models.ManyToManyField(Giraffe)
class Bear(models.Model):
pass
class Giraffe(models.Model):
pass
ジェネリッククラスメソッドの "Bear" -Classまたはそれぞれの "Giraffe" -Classにアクセスして、正しいQuerySetの空のクエリを返すにはどうしたらいいですか?
追加情報:
# dir(cls_obj.siblings) returns:
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__get__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__set__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'field', 'related_manager_cls', 'through']
ではなく、空のクエリセットの:これは何をしたい、おそらくですManyToManyフィールドで参照されるクラス(空のBearまたはGiraffeクエリーセット)。 'Bear.objects.none()'は空のクエリーセットを返すので、これらが存在することはわかっています。クマはもう一つのdjangoクラスです(これを私のコード例に追加して、それをさらに明確にします) – gimili
これを正しく理解していれば、クエリーに動物がない場合、クエリーセットを空として定義しようとしています目的の動物と一致する。その場合、基本クラス(AnimalFamily)に空のクエリセットを設定する必要はありませんが、その操作を子に移動する必要はありません。その場合、基本クラス定義は次のようになります:class AnimalFamily(models.Model): #objects = GetOrNoneManager()djangoメソッド名をクラス属性として使用して混乱を招きます 兄弟= objects.none ) – postoronnim
これは基本クラスのコードです: – postoronnim