标签: django-models

Django - 具有伴随存储字段的自定义虚拟模型字段

我想要一个ConfirmationField字段类型.我希望这个字段像布尔字段一样工作.我不需要将此信息存储在数据库中,而是希望将确认日期存储在单独的字段中.

class MyModel(models.Model):
    confirmation = ConfirmationField()


m = MyModel()
m.confirmation # False
m.confirmation_timestamp # None

m.confirmation = True
m.save()

m.confirmation_timestamp # datetime object


m.confirmation = False
m.save()

m.confirmation_timestamp # None again
Run Code Online (Sandbox Code Playgroud)

我需要将两个字段都作为Field实例,我需要能够在Admin中使用它们.

我已阅读文档并检查代码,ForeignKey使用以下代码更改其数据库列名称:

def get_attname(self):
    return '%s_id' % self.name
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何使用其余代码作为示例.看来我的目标并不需要太多的复杂性.

ImageField保存模型时,我还发现了保存的额外信息:

    if self.field.width_field:
        setattr(self.instance, self.field.width_field, self.width)
    if self.field.height_field:
        setattr(self.instance, self.field.height_field, self.height)
Run Code Online (Sandbox Code Playgroud)

但是我当然不希望confirmation自己存储在数据库中.因为(confirmation_timestamp- > confirmation)None== False<datetime instance>==,我会造成冗余True.

任何指针/想法都表示赞赏.

谢谢.

编辑:目前看来这是不可能的.我最终改变了我的API.这是一个snipplet,让我知道我是如何做到的:

    value …
Run Code Online (Sandbox Code Playgroud)

django django-models django-orm django-admin

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

获取外键而不请求整个对象

我有一个模型Foo,它对User模型有一个ForeignKey.

之后,我需要获取所有用户的ID并将其放在列表中

foos = Foo.objects.filter(...)

l = [ f.user.id for f in foos ]
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时,django从数据库中抓取整个User实例,而不是仅仅给出数字用户的id,它存在于每个Foo行中.

如何在不查询每个用户或使用select_related的情况下获取所有ID?

谢谢

python django django-models

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

在django网站中,我想让用户创建与其帐户绑定的其他用户

我想让登录和注册的用户创建他将成为管理员的额外用户帐户.这些帐户将是与创建它们的用户绑定的特殊"下级"帐户.他应该能够添加/修改/删除这些帐户,就像Google应用程序管理员如何管理公司帐户一样(您是普通用户,但也创建/销毁其他用户.)

下级帐户无法创建/修改/删除帐户(除了更改自己的密码和正常的用户行为.)我正在为所有这些帐户使用django auth模型.在不使用任何管理代码的情况下,从我自己定制的网页中访问auth方法添加/修改/删除帐户的好方法是什么?

django django-models django-admin

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

如何找到Python/Django模型对象的内存地址?

一个普通的物体,我可以用

o.__repr__() 
Run Code Online (Sandbox Code Playgroud)

看到类似的东西

'<__main__.A object at 0x9d78fec>'
Run Code Online (Sandbox Code Playgroud)

但是,比方说,Django用户只会返回

<User:bob>
Run Code Online (Sandbox Code Playgroud)

如何查看其中一个的实际地址,或比较两个这样的模型对象是否实际上是同一个对象?

python django django-models

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

限制管理模型条目

我有一个名为Foo的模型:

class Foo(models.Model):
    name = models.CharField()
    entry = models.DateField()
Run Code Online (Sandbox Code Playgroud)

我有两种类型的用户可以登录管理面板,常规和超级用户.我想禁止编辑/删除超过2天的Foo条目(通过使用输入日期字段),但超级用户可以不受任何限制地进行编辑.我怎样才能做到这一点?谢谢

django django-models django-admin

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

django经理的问题

我有以下型号:

class UserProfile(models.Model):
    """
    User profile model, cintains a Foreign Key, which links it to the
    user profile.
    """
    about = models.TextField(blank=True)
    user = models.ForeignKey(User, unique=True)
    ranking = models.IntegerField(default = 1)
    avatar = models.ImageField(upload_to="usermedia", default = 'images/js.jpg')
    updated = models.DateTimeField(auto_now=True, default=datetime.now())
    is_bot = models.BooleanField(default = False)
    is_active = models.BooleanField(default = True)
    is_free = models.BooleanField(default = True)
    objects = ProfileManager()

    def __unicode__(self):
        return u"%s profile" %self.user
Run Code Online (Sandbox Code Playgroud)

还有经理

class ProfileManager(models.Manager):
    """
    Stores some additional helpers, which to get some profile data
    """ …
Run Code Online (Sandbox Code Playgroud)

django django-models django-managers

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

django模型对象到python列表

我想使用我的Django模型生成列表

说我有这些模型:

class AlarmServer(models.Model):
    ip = models.IPAddressField()
Run Code Online (Sandbox Code Playgroud)

这样的清单

server_ips = [i.ipfor i in AlarmServer.objects.all()]
Run Code Online (Sandbox Code Playgroud)

似乎没有用,我在做什么错?

django django-models

0
推荐指数
2
解决办法
3891
查看次数

在django Rest框架中编写测试用例时如何添加标题?

我正在尝试为我的项目编写测试用例。现在的问题是,我不知道如何在标头中传递自定义关键字参数。下面是我的测试用例类。

class ProjectTestClass(APITestCase,URLPatternsTestCase):

    allow_database_queries: True

    def projects_notifications_list(self,token,project_key):
        url = reverse('projects:project_noti_list',kwargs={"category": "all"})
        response = self.client.get(
            url,
            format='json', 
            HTTP_AUTHORIZATION="JWT "+token,
            headers={"platform-subscriber-id":project_key}
            )
        print("data -> ",response.data)

        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(len(response.data), 3)
Run Code Online (Sandbox Code Playgroud)

如您所见,我在标头中传递了 plaform-subsciber-id 。但收到错误 {'message': '标题中需要平台订阅者 id'}。看来 id 没有在标头中正确配置。有人知道这个吗?

python django django-models django-testing django-rest-framework

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

如何在Django中删除具有ManyToMany关系的对应行?

我正在尝试制作一个带有两个 API、配料和披萨的基本披萨应用程序。当我删除配料时,我希望相应的披萨也被删除,因为配料不再可用。就目前而言,当我删除配料时,它只会保留一个空的披萨对象。

楷模:

class Toppings(models.Model):
    name = models.CharField(max_length=60, unique=True)

    def __str__(self):
        return self.name


class Pizza(models.Model):
    name = models.CharField(max_length=60, unique=True)
    topping = models.ManyToManyField(Toppings, max_length=60, related_name="toppings")

    def __str__(self):
        return (self.name, self.topping)
Run Code Online (Sandbox Code Playgroud)

序列化器:

class PizzaSerializer(serializers.ModelSerializer):
    toppings = ToppingsSerializer(read_only=True, many=True)

    class Meta:
        model = Pizza
        fields = "__all__"
class ToppingsSerializer(serializers.ModelSerializer):

    class Meta:
        model = Toppings
        fields = "__all__"
Run Code Online (Sandbox Code Playgroud)

Pizza.views 和 Toppings.views 几乎相同,所以我只包含 Pizza。

class PizzaList(generics.ListAPIView):
    queryset = Pizza.objects.all()
    serializer_class = PizzaSerializer


class PizzaCreate(generics.CreateAPIView):
    queryset = Pizza.objects.all()
    serializer_class = PizzaSerializer


class PizzaUpdate(generics.UpdateAPIView):
    queryset = Pizza.objects.all() …
Run Code Online (Sandbox Code Playgroud)

python django django-models django-views django-rest-framework

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

如何在 Django 中搜索精确值?

我创建了一个搜索功能。但是,它会搜索包含输入值的所有元素。例如,有以下元素:44564、76436、445。当我输入“445”时,它显示“44564”和“445”,但我只需要445。或者如果我输入“64”,那么什么都不应该显示,但显示“44564”和“76436”。如何修复它?

案例列表.html

<div>
    <h3>Search</h3>
    <form method="GET" action="{% url 'case_search' %}">
        <input type="search" type="text" name="q" prequired placeholder="Put value">
        <button type="submit">Find</button>
    </form>
</div>
<div>
  {% for case in object_list %}
        <div>
            <p>{{ case.name }}</p>
        </div>
  {% endfor %}
</div>
Run Code Online (Sandbox Code Playgroud)

视图.py

class CaseView(ListView):
    model = Case
    template_name = 'case_list.html'

class CaseSearch(ListView):
    template_name = 'case_list.html'
    def get_queryset(self):
        return Case.objects.filter(name__icontains=self.request.GET.get("q"))
    def get_context_data(self, *args, **kwargs):
        context = super().get_context_data(*args, **kwargs)
        context["q"] = self.request.GET.get("q")
        return context
Run Code Online (Sandbox Code Playgroud)

网址.py

    path('case_list/', CaseView.as_view(), name='case_list'),
    path('case_list/search/', CaseSearch.as_view(), name="case_search"),
Run Code Online (Sandbox Code Playgroud)

django django-templates django-models django-forms django-views

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