Django管理站点给Djangae错误

时间:2018-03-09 23:29:21

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

我有一个Django应用程序,可以在谷歌应用程序引擎上完美运行,通过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)

2 个答案:

答案 0 :(得分:0)

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

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

不应该是第一个:DonationRequestAdmin

答案 1 :(得分:0)

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