2017-05-15 13 views
0

私は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. 

を、どのように私はこれを起こさせるのですか?

答えて

関連する問題