私はswappableを使用して、開発者が独自にスワップできるモデルを提供する再利用可能なアプリケーション(Meat
)を作成しています。そのモデルは他のモデルのスーパークラスです。これをテストするDjango - スワップ可能なモデルの継承を許可する方法は?
from django.db.models import Model, CharField
from swapper import swappable_setting
class AbstractMeat(Model):
class Meta:
abstract = True
name = CharField(max_length=16)
class Meat(AbstractMeat):
class Meta:
swappable = swappable_setting("cyber", "Meat")
class Pork(Meat):
pass
class Fish(Meat):
pass
は、私はreal
アプリを作成し、MEAT_MEAT_MODEL
を設定します。
runserver
私はこのエラーを取得する実行
# settings.py
MEAT_MEAT_MODEL = "real.RealMeat"
# real/models.py
from django.forms import IntegerField
from cyber.models import AbstractMeat
class RealMeat(AbstractMeat):
price = IntegerField()
:
meat.Fish.meat_ptr: (fields.E301) Field defines a relation with the model 'meat.Meat', which has been swapped out.
HINT: Update the relation to point at 'settings.MEAT_MEAT_MODEL'.
meat.Pork.meat_ptr: (fields.E301) Field defines a relation with the model 'meat.Meat', which has been swapped out.
HINT: Update the relation to point at 'settings.MEAT_MEAT_MODEL'.
このエラーは1.11にはDjango 1.9で発生しますが、私の目的のためにのみ1.11は非常に重要ですが。
私はそうのようなMulti-table inheritanceの指示通りmeat_ptr
を上書きしようとした:
from swapper import get_model_name
from django.db.models import OneToOneField, CASCADE
class Pork(Meat):
meat_ptr = OneToOneField(
get_model_name("meat", "Meat"), CASCADE,
parent_link=True)
しかし、それは1.11と1.10(ただし、1.9)に私は、このエラーを与える:結論として
django.core.exceptions.FieldError: Auto-generated field 'meat_ptr' in class 'Pork' for parent_link to base class 'Meat' clashes with declared field of the same name.
を、どのように私はこれを起こさせるのですか?