小编mas*_*imp的帖子

使用ABC,PolymorphicModel,django-models给出了元类冲突

到目前为止,关于SO的所有其他答案都以完全相同的方式回答:构造你的元类然后继承那些元类的"加入"版本,即

class M_A(type): pass
class M_B(type): pass
class A(metaclass=M_A): pass
class B(metaclass=M_B): pass

class M_C(M_A, M_B): pass
class C:(A, B, metaclass=M_C): pass
Run Code Online (Sandbox Code Playgroud)

但我不知道这些人住在哪个世界,他们在哪里构建自己的元类!显然,一个人会使用其他库中的类,除非你对元编程有一个完美的处理,你怎么知道你是否可以覆盖一个类的元类?(显然我还没有处理它们).

我的问题是:

class InterfaceToTransactions(ABC):
    def account(self):
        return None
    ...

class Category(PolymorphicModel, InterfaceToTransactions):
    def account(self):
        return self.source_account
    ...

class Income(TimeStampedModel, InterfaceToTransactions):
    def account(self):
        return self.destination_account
    ...
Run Code Online (Sandbox Code Playgroud)

这当然给了我错误:"元类冲突:派生类的元类必须是其所有基础的元类的(非严格)子类" 我已经尝试了上面给出的解决方案的许多变体,以下是不工作,给出同样的错误.

class InterfaceToTransactionsIntermediaryMeta(type(PolymorphicModel), type(InterfaceToTransactions)):
pass

class Category(PolymorphicModel, InterfaceToTransactions):
    __metaclass__ = InterfaceToTransactionsIntermediaryMeta
    ...
Run Code Online (Sandbox Code Playgroud)

也没有把任何东西放在Meta函数中.我已经阅读了关于这个主题的每一个其他问题,请不要简单地将其标记为重复.

-------------------在接受解决方案后的1/8/18编辑-------

奇怪的是,如果我尝试使用这个新配置(我接受的那个)进行迁移,它会再次开始给出元类错误,但它仍然可以在运行时运行.如果我注释掉元类部件然后makemigrations并迁移,它会成功完成,但是每次迁移后我都必须把它放回去.

python django metaclass abc django-polymorphic

6
推荐指数
1
解决办法
546
查看次数

django:django-tables2 DetailView CBV不会显示单个对象

我有一张桌子

import django_tables2 as tables
from .models import Account
from django_tables2.utils import A  # alias for Accessor


class AccountTable(tables.Table):
    nickname = tables.LinkColumn('accounts:detail', args=[A('pk')])

    class Meta:
        model = Account
        attrs = {'class': 'table table-striped table-hover'}
        exclude = ("created", "modified", "destination")
Run Code Online (Sandbox Code Playgroud)

一个看法:

class DetailView(SingleTableMixin, generic.DetailView):

    template_name = 'accounts/account_detail.html'
    context_table_name = 'table'
    model = Account
    table_class = AccountTable
    context_object_name = object

    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super(DetailView, self).dispatch(*args, **kwargs)

    def get_context_data(self, **kwargs):
        context = super(DetailView, self).get_context_data(object=self.object)
        context['title'] = 'Account Detail'
        context['pk'] = …
Run Code Online (Sandbox Code Playgroud)

python django django-tables2 detailview

5
推荐指数
1
解决办法
679
查看次数

django modelform属性隐藏字段

我手动显示我的formset作为一个表,每个表单都循环.在每个表单的底部,我包括隐藏的字段,如:

{% for hidden in form.hidden_fields %}
    {{ hidden }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

但问题是我还在我的表单中包含属性,如:

class AllocationForm(forms.ModelForm):
    name = forms.CharField(widget=forms.TextInput(attrs={'size': '15'}))

    def __init__(self, *args, **kwargs):
        super(AllocationForm, self).__init__(*args, **kwargs)
        if self.instance:
            self.fields['total_budgeted'] = self.instance.total_budgeted()
            self.fields['total_budgeted_account_percent'] = self.instance.total_budgeted_account_percent()
            self.fields['actual_spent'] = self.instance.actual_spent()
            self.fields['actual_spent_account_percent'] = self.instance.actual_spent_account_percent()
            self.fields['total_budgeted_category_percent'] = self.instance.total_budgeted_category_percent()
            self.fields['actual_spent_category_percent'] = self.instance.actual_spent_category_percent()

    class Meta:
        model = Allocation
        exclude = {'created', 'modified', 'source_account'}
Run Code Online (Sandbox Code Playgroud)

而这在某种意义上起作用,我肯定会看到被调用的属性,但它们显示为什么都没有,所以这是另一个问题.

问题是当我在模板中保留隐藏字段时,我会得到错误,例如'int'对象没有属性'get_bound_field'等等,具体取决于属性/方法调用的返回类型.

我的问题是第一:有没有检查我可以做看场是一个属性模板,因此跳过了吗?它可能与我如何使用属性有关,因为实际上每个属性都没有显示(但我看到它回调),所以第二个是关于如何显示属性.

django properties hidden-field modelform

3
推荐指数
1
解决办法
1085
查看次数