gpt4 book ai didi

python - Django 在代理模型中保存默认值

转载 作者:行者123 更新时间:2023-12-04 00:57:51 25 4
gpt4 key购买 nike

不同的代理模型应该是不同的类型。
如果我查询这些模型,我就是正确的模型。

我正在尝试在代理模型中保存默认类型字段。
我不想每次都在 View 中设置它。

这不起作用。类型字段始终为“TYPE1”。

模型.py:

class MyModel(models.Model):

class ModelType(models.TextChoices):
TYPE1 = 'TYPE1', _('TYPE1')
TYPE2 = 'TYPE2', _('TYPE2')

type = models.CharField(max_length=100, choices=ModelType.choices, default='TYPE1')


class Type2Manager(models.Manager):

def get_queryset(self):
return super(Type2Manager, self).get_queryset().filter(type='TYPE2')

def save(self, *args, **kwargs):
kwargs.update({'type': 'TYPE2'})
return super(Type2Manager, self).save(*args, **kwargs)


class Type2ProxyModel(MyModel):
class Meta:
proxy = True

objects = Type2Manager()


View .py:

def create_type2_model(request):
form = Type2Form(request.POST, initial={})
f = form.save(commit=False)
f.save()


表格.py:

class Type2Form(ModelForm):

class Meta:
model = Type2ProxyModel


25.02.2020 12:18 更新:

我发现这设置了正确的类型。但是我不知道如何在 ModelForm 中使用 create() 。

class Type2Manager(models.Manager):

...

def create(self, **kwargs):
kwargs.update({'type': 'TYPE2'})
return super(Type2Manager, self).create(**kwargs)

Type2ProxyModel.objects.create()

最佳答案

模型管理器在“表级别”上运行。当您通过表单创建对象时,它使用模型对象而不是模型管理器,因此您需要覆盖代理模型的 save。如果我将您的 Type2ProxyModel 修改为此,它会起作用:

class Type2ProxyModel(MyModel):
class Meta:
proxy = True

objects = Type2Manager()

def save(self, *args, **kwargs):
self.type = 'TYPE2'
return super(Type2ProxyModel, self).save(*args, **kwargs)

关于python - Django 在代理模型中保存默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60847167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com