标签: many-to-many

使用 related_name 在 Django 管理中将 ManyToMany 作为水平过滤器呈现

我有以下内容:

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 many-to-many django-admin

0
推荐指数
1
解决办法
1517
查看次数

Django 管理 CheckboxSelectMultiple 小部件不适用于 ManyToManyField

我使用下面的模型,其中默认的 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)

结果:formfield_override不起作用,选择用户入住酒店不是一个复选框 在此输入图像描述

python django many-to-many django-admin django-widget

0
推荐指数
1
解决办法
2402
查看次数

通过字段名更新 django 中的多对多字段

我正在使用 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 regionis 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)

python django many-to-many field-names

0
推荐指数
1
解决办法
1234
查看次数

sqlite android中的多对多关系

我的数据库中有两个表1.医生2.诊所

在这里医生有一个或多个诊所和诊所可以有一个或多个医生..

所以我希望两个表之间有很多很多关系

所以请告诉我该怎么做.

提前致谢!

sqlite android many-to-many

-2
推荐指数
1
解决办法
2260
查看次数