我有以下内容:
class User(models.Model)
blablabla
class Product(models.Model)
authorized_users = models.ManyToManyField(
User,
related_name='shared_products',
)
Run Code Online (Sandbox Code Playgroud)
我已经将 的 管理员配置为Product
显示authorized_users
为水平过滤器,以便选择可以编辑产品的所有用户。
class ProductAdmin(admin.ModelAdmin):
filter_horizontal = (
'authorized_users',
)
admin.site.register(Product, ProductAdmin)
Run Code Online (Sandbox Code Playgroud)
问题是我想在 的 管理中执行相同的操作User
,这意味着我想要 的 水平过滤器shared_products
,以便选择该用户能够编辑的产品。我已经尝试过以下显然不起作用的方法:
class UserAdmin(admin.ModelAdmin):
filter_horizontal = (
'authorized_users',
)
admin.site.register(User, UserAdmin)
Run Code Online (Sandbox Code Playgroud)
我发现的其他答案推荐使用内联,但正如我所见,它们用于编辑另一端的模型实例,这不是我想要做的。
有人知道如何实现这一目标吗?
我使用下面的模型,其中默认的 django 用户表与 Hotel 具有多对多关系。
在 django 管理面板中将多个用户分配给酒店很困难,我想将默认的“ctrl-click”方法替换为复选框,在该复选框中我可以选择多个用户而无需按住 ctrl。
模型:
from django.db import models
from django.contrib.auth.models import User
class Hotel(models.Model):
# associate the user
user = models.ManyToManyField(User)
# additional fields
hotel_name = models.CharField(max_length=100)
hotel_id = models.CharField(max_length=100)
def __str__(self):
return self.hotel_id
Run Code Online (Sandbox Code Playgroud)
管理员.py
from django.contrib import admin
from .models import *
from django.forms import CheckboxSelectMultiple
# Checkbox for many-to-many fields
class HotelAdmin(admin.ModelAdmin):
formfield_overrides = {
models.ManyToManyField: {'widget': CheckboxSelectMultiple},
}
admin.site.register(Hotel)
Run Code Online (Sandbox Code Playgroud)
我正在使用 Django 构建一个 API,它允许外部应用程序将帖子发送到我的 API,然后将收到的数据插入到我的数据库中。
这是我的简化模型:
class Region(models.Model):
name = models.CharField(max_length=250)
class Event(models.Model):
name = models.CharField(max_length=250)
region = models.ManyToManyField(Region)
Run Code Online (Sandbox Code Playgroud)
我从 api 收到一些新的事件数据,如下所示:
data = {
"name": "First Event",
"region": "4" # this is the ID of the region
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个像这样的新事件:
Event.objects.create(**data)
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
Direct assignment to the forward side of a many-to-many set is prohibited. Use region.set() instead.
Run Code Online (Sandbox Code Playgroud)
问题是我不能使用new_event.region.add(4)
Cause region
is a string,并且由于这是一个 API,因此该字段始终作为 json 键检索。
我读了这个问题/sf/ask/585260721/# =要求完全相同,但是给出的答案不起作用,因为当我写下:
new.__getattribute__(relation_name) = my_authors
Run Code Online (Sandbox Code Playgroud)
正如那里所建议的,我收到以下错误,这是有道理的:
SyntaxError: can't assign to function …
Run Code Online (Sandbox Code Playgroud) 我的数据库中有两个表1.医生2.诊所
在这里医生有一个或多个诊所和诊所可以有一个或多个医生..
所以我希望两个表之间有很多很多关系
所以请告诉我该怎么做.
提前致谢!