标签: django-models

Django:我怎样才能找到ORM知道的模型列表?

在Django中,有一个地方我可以获得ORM知道的模型列表或查找模型吗?

django django-models

78
推荐指数
5
解决办法
2万
查看次数

批量在django中创建模型对象

我有很多对象要保存在数据库中,所以我想用它创建Model实例.

使用django,我可以创建所有模型实例,MyModel(data)然后我想将它们全部保存.

目前,我有类似的东西:

for item in items:
    object = MyModel(name=item.name)
    object.save()
Run Code Online (Sandbox Code Playgroud)

我想知道我是否可以直接保存对象列表,例如:

objects = []
for item in items:
    objects.append(MyModel(name=item.name))
objects.save_all()
Run Code Online (Sandbox Code Playgroud)

如何在一个事务中保存所有对象?

django django-models

78
推荐指数
4
解决办法
9万
查看次数

Django:将auth用户导入模型

我有一个问题.在Django中我创建了一个新模型:

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

class Workers(models.Model):
    user = models.OneToOneField(User, primary_key=True)
        work_group = models.CharField(max_length=20)
        card_num = models.IntegerField()
    def __unicode__(self):
            return self.user
Run Code Online (Sandbox Code Playgroud)

但它不起作用: ImportError: cannot import name user

怎么解决?

所以,我想在db中创建一个新表"workers",它OneToOne与表"auth_user" 有关系.谢谢.

django django-models

78
推荐指数
3
解决办法
7万
查看次数

Django:我如何防止数据库条目的并发修改

如果有办法防止两个或多个用户同时修改同一数据库条目?

向执行第二次提交/保存操作的用户显示错误消息是可以接受的,但不应以静默方式覆盖数据.

我认为锁定条目不是一个选项,因为用户可能会使用"后退"按钮或只是关闭他的浏览器,永远保持锁定.

django concurrency transactions atomic django-models

77
推荐指数
5
解决办法
4万
查看次数

将models.py拆分为多个文件

我正在尝试将models.py我的应用程序拆分为几个文件:

我的第一个猜测是这样做:

myproject/
    settings.py
    manage.py
    urls.py
    __init__.py
    app1/
        views.py
        __init__.py
        models/
            __init__.py
            model1.py
            model2.py
    app2/
        views.py
        __init__.py
        models/
            __init__.py
            model3.py
            model4.py
Run Code Online (Sandbox Code Playgroud)

这不起作用,然后我找到了这个,但在这个解决方案中我仍然有一个问题,当我运行时,python manage.py sqlall app1我有类似的东西:

BEGIN;
CREATE TABLE "product_product" (
    "id" serial NOT NULL PRIMARY KEY,
    "store_id" integer NOT NULL
)
;
-- The following references should be added but depend on non-existent tables:
-- ALTER TABLE "product_product" ADD CONSTRAINT "store_id_refs_id_3e117eef" FOREIGN KEY     ("store_id") REFERENCES "store_store" ("id") DEFERRABLE INITIALLY DEFERRED;
CREATE INDEX "product_product_store_id" ON …
Run Code Online (Sandbox Code Playgroud)

python django import django-models

77
推荐指数
4
解决办法
4万
查看次数

Django管理员ManyToMany内联"没有ForeignKey to"错误

我正在将Django管理员设置为以下模型:

class Quote(models.Model):                                                  
    author = models.CharField(max_length=100)                               
    quote = models.CharField(max_length=1000)                               
    tags = models.ManyToManyField('Tag')                                    

class Tag(models.Model):                                                    
    name = models.CharField(max_length=100)                                 
Run Code Online (Sandbox Code Playgroud)

使用以下代码:

class TagInline(admin.TabularInline):                                                                                               
    model = Tag                                                             

class QuoteAdmin(admin.ModelAdmin):                                         
    list_display = ('author', 'quote')                                      
    inlines = (TagInline,)                                                  

class TagAdmin(admin.ModelAdmin):                                           
    pass                                                                    

admin.site.register(Quote, QuoteAdmin)                                      
admin.site.register(Tag, TagAdmin)
Run Code Online (Sandbox Code Playgroud)

在尝试查看管理页面以添加时Quote,该页面显示错误说明<class 'quotes.models.Tag'> has no ForeignKey to <class 'quotes.models.Quote'>.在添加内联之前没有发生这种情况.有什么问题?如何正确添加Tag内联?

(我花了大约20分钟寻找答案;我发现了类似的问题,但他们的答案都没有对我有用.)

django django-models

77
推荐指数
1
解决办法
3万
查看次数

Django中唯一的BooleanField值?

假设我的models.py是这样的:

class Character(models.Model):
    name = models.CharField(max_length=255)
    is_the_chosen_one = models.BooleanField()
Run Code Online (Sandbox Code Playgroud)

我只想要我的一个Character实例is_the_chosen_one == True和其他所有实例is_the_chosen_one == False.如何才能最好地确保这种唯一性约束得到尊重?

考虑到尊重数据库,模型和(管理员)表单级别约束的重要性的答案的最高分!

database django django-models django-forms django-admin

76
推荐指数
9
解决办法
2万
查看次数

如何解决Django中跨数据库的外键缺乏支持

我知道Django不支持跨多个数据库的外键(最初是Django 1.3 docs)

但我正在寻找一种解决方法.

什么行不通

我在一个单独的数据库上有两个模型.

routers.py:

class NewsRouter(object):
    def db_for_read(self, model, **hints):
        if model._meta.app_label == 'news_app':
            return 'news_db'
        return None

    def db_for_write(self, model, **hints):
        if model._meta.app_label == 'news_app':
            return 'news_db'
        return None

    def allow_relation(self, obj1, obj2, **hints):
        if obj1._meta.app_label == 'news_app' or obj2._meta.app_label == 'news_app':
            return True
        return None

    def allow_syncdb(self, db, model):
        if db == 'news_db':
            return model._meta.app_label == 'news_app'
        elif model._meta.app_label == 'news_app':
            return False
        return None
Run Code Online (Sandbox Code Playgroud)

fruit_app/models.py中的模型1:

from django.db import models

class Fruit(models.Model):
    name …
Run Code Online (Sandbox Code Playgroud)

django django-models django-orm

76
推荐指数
1
解决办法
6794
查看次数

仅更新models.Model中的特定字段

我有一个模特

class Survey(models.Model):
    created_by = models.ForeignKey(User)
    question = models.CharField(max_length=150)
    active = models.NullBooleanField()
    def __unicode__(self):
        return self.question
Run Code Online (Sandbox Code Playgroud)

现在我想只更新active字段.所以我这样做:

survey = get_object_or_404(Survey, created_by=request.user, pk=question_id)
survey.active = True
survey.save(["active"]) 
Run Code Online (Sandbox Code Playgroud)

现在我收到一个错误IntegrityError: PRIMARY KEY must be unique.

我是否正确使用此方法进行更新?

django django-models django-views django-database

76
推荐指数
2
解决办法
8万
查看次数

Django删除FileField

我正在Django中构建一个Web应用程序.我有一个上传文件的模型,但我无法删除它.这是我的代码:

class Song(models.Model):
    name = models.CharField(blank=True, max_length=100)
    author = models.ForeignKey(User, to_field='id', related_name="id_user2")
    song = models.FileField(upload_to='/songs/')
    image = models.ImageField(upload_to='/pictures/', blank=True)
    date_upload = models.DateField(auto_now_add=True)

    def delete(self, *args, **kwargs):
        # You have to prepare what you need before delete the model
        storage, path = self.song.storage, self.song.path
        # Delete the model before the file
        super(Song, self).delete(*args, **kwargs)
        # Delete the file after the model
        storage.delete(path)
Run Code Online (Sandbox Code Playgroud)

然后,在"python manage.py shell"中我这样做:

song = Song.objects.get(pk=1)
song.delete()
Run Code Online (Sandbox Code Playgroud)

它从数据库中删除,但不从服务器上的文件中删除.我还能尝试什么?

谢谢!

django django-models

75
推荐指数
7
解决办法
4万
查看次数