【问题标题】:Django admin site gives error on DjangaeDjango 管理站点在 Djangae 上给出错误
【发布时间】:2018-03-09 23:29:21
【问题描述】:

我有一个 Django 应用程序,可以在 google 应用程序引擎上完美运行,通过 djangae 使用数据存储。但是,管理站点抛出错误:

NotSupportedError at /admin/auth/user/5629499534213120/change/

Cross-join where filters are not supported on the Datastore

此错误仅在尝试编辑默认 Django 用户模型时发生。不知道为什么会这样。

我使用了默认的 Django 用户模型。 (这是一个为非营利组织处理捐款的应用)

models.py:

from django.db import models
from django.contrib.auth.models import User

# Create your models here.


class FoodSplashUser(models.Model):
    base_user = models.OneToOneField(User, on_delete=models.CASCADE)

    address = models.TextField(null=True)
    city = models.TextField(null=True)
    state = models.CharField(max_length=4, null=True)
    zip = models.CharField(max_length=10, null=True)

    def __str__(self):
        return str(self.base_user.username)


class Organization(models.Model):
    base_user = models.OneToOneField(User, on_delete=models.CASCADE)

    address = models.TextField(null=True)
    city = models.TextField(null=True)
    state = models.CharField(max_length=4, null=True)
    zip = models.CharField(max_length=10, null=True)

    description = models.TextField(null=True)
    image_url = models.URLField(null=True)

    def __str__(self):
        return str(self.base_user.username)


class DonationRequest(models.Model):
    organization = models.ForeignKey(Organization, on_delete=models.CASCADE)
    timestamp = models.DateTimeField(auto_now=True)
    request_type = models.TextField(null=True)
    description = models.TextField(null=True)

    def __str__(self):
        return str(self.organization.base_user.username) + " " + self.request_type


class DonationPromise(models.Model):
    user = models.ForeignKey(FoodSplashUser, on_delete=models.CASCADE)
    donation_request = models.ForeignKey(DonationRequest, on_delete=models.CASCADE)
    timestamp = models.DateTimeField(auto_now=True)
    verified = models.BooleanField(default=False)

    def __str__(self):
        return str(self.user.base_user.username) + " " + str(self.donation_request)

这个应用程序使用默认的 Django 管理界面,但我决定制作下面的类以便以后编辑。

admin.py:

from django.contrib import admin
from . import models

# Register your models here.


class FoodSplashUserAdmin(admin.ModelAdmin):
    pass


class OrganizationAdmin(admin.ModelAdmin):
    pass


class DonationRequestAdmin(admin.ModelAdmin):
    pass


class DonationPromiseAdmin(admin.ModelAdmin):
    pass


admin.site.register(models.FoodSplashUser, FoodSplashUserAdmin)
admin.site.register(models.Organization, OrganizationAdmin)
admin.site.register(models.DonationRequest, DonationPromiseAdmin)
admin.site.register(models.DonationPromise, DonationPromiseAdmin)

【问题讨论】:

标签: django google-app-engine google-cloud-datastore


【解决方案1】:

这可能是一个单独的错误,但是:

admin.site.register(models.DonationRequest, DonationPromiseAdmin)
admin.site.register(models.DonationPromise, DonationPromiseAdmin)

第一个不应该是:DonationRequestAdmin

【讨论】:

  • 这是一个不同的错误,但感谢您发现它
【解决方案2】:

NotSupportedError 表示您的代码执行了 App Engine Datastore 无法执行的操作。并非所有 Django ORM 功能都可以在 Datastore 所在的非关系型数据库中使用。您正在尝试创建一个具有某些关系的实体,这会导致错误。可能最好使用Gauth 进行身份验证和用户管理,如 Djangae 文档中所述。

【讨论】:

  • 用户身份验证系统工作正常。只是 Django admin 用户管理页面存在此问题。
  • 你看到这个Google Groups thread了吗?有人遇到了同样的错误,并被 Djangae 人建议使用 Gauth 文档中指定的内容。它有助于克服 Datastore 的多对多关系问题。
  • 当我按照这些说明进行操作时,我得到:'WSGIRequest' object has no attribute 'session' 是的,我的中间件中有 'django.contrib.sessions.middleware.SessionMiddleware'
猜你喜欢
  • 2019-01-13
  • 1970-01-01
  • 2014-11-18
  • 2021-04-01
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 2013-03-23
  • 1970-01-01
相关资源
最近更新 更多