【发布时间】:2021-07-06 16:13:11
【问题描述】:
我正在使用 django rest 框架创建一个 API。 但是当我已经创建了关联的 ModelViewset 时,每次想修改模型时都会遇到问题。
例如,我有这个模型:
class Machine(models.Model):
name = models.CharField(_('Name'), max_length=150, unique=True)
provider = models.CharField(_("provider"),max_length=150)
build_date = models.DateField(_('build date'))
category = models.ForeignKey("machine.CategoryMachine",
related_name="machine_category",
verbose_name=_('category'),
on_delete=models.CASCADE
)
site = models.ForeignKey(
"client.Site",
verbose_name=_("site"),
related_name="machine_site",
on_delete=models.CASCADE
)
class Meta:
verbose_name = _("Machine")
verbose_name_plural = _("Machines")
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse("Fridge_detail", kwargs={"pk": self.pk})
还有这个视图集:
class MachineViewSet(viewsets.ModelViewSet):
"""
A simple ViewSet for listing or retrieving machine.
"""
permission_classes = [permissions.IsAuthenticated]
serializer_class = MachineSerializer
queryset = cache.get_or_set(
'machine_machines_list',
Machine.objects.all(),
60*60*24*7
)
@swagger_auto_schema(responses={200: MachineSerializer})
def list(self, request):
serializer_context = {
'request': request,
}
queryset = cache.get_or_set(
'machine_machines_list',
Machine.objects.all(),
60*60*24*7
)
serializer = MachineSerializer(queryset, many=True, context=serializer_context)
return Response(serializer.data)
@swagger_auto_schema(responses={404: 'data not found', 200: MachineSerializer})
def retrieve(self, request, pk=None):
serializer_context = {
'request': request,
}
queryset = Machine.objects.all()
machine = get_object_or_404(queryset, pk=pk)
serializer = MachineSerializer(machine, context=serializer_context)
return Response(serializer.data)
如果我想向我的模型添加一个字段,例如描述。当我运行命令python manage.py makemigrations
我得到错误:
django.db.utils.ProgrammingError: column machine_machine.description does not exist
我必须注释我的视图集才能运行makemigrations 和migrate。
当我想修改模型时,如何避免每次查看视图集时都必须评论?
【问题讨论】:
-
你能分享回溯吗?
-
你会将查询集的结果缓存一周??你真的确定吗?您可能会以这种方式向用户显示陈旧的数据。
-
我在结果改变时从缓存中删除数据(例如添加对象后...)
标签: django django-models django-rest-framework