我有一个Django应用程序,我想在其中将ForeignKey中的字段更改为ManyToManyField.我想保留我的旧数据.最简单/最好的流程是什么?如果重要,我使用sqlite3作为我的数据库后端.
如果我对问题的总结不清楚,这是一个例子.说我有两个型号:
class Author(models.Model):
author = models.CharField(max_length=100)
class Book(models.Model):
author = models.ForeignKey(Author)
title = models.CharField(max_length=100)
Run Code Online (Sandbox Code Playgroud)
假设我的数据库中有很多数据.现在,我想更改Book模型,如下所示:
class Book(models.Model):
author = models.ManyToManyField(Author)
title = models.CharField(max_length=100)
Run Code Online (Sandbox Code Playgroud)
我不想"丢失"我之前的所有数据.
完成此任务的最佳/最简单方法是什么?
肯
我想使用代表这些模型的Flask,SQLAlchemy和WTForms为多对多关系创建一个表单:
personaddress = db.Table('personaddress',
db.Column('person', db.Integer, db.ForeignKey('person.id')),
db.Column('address', db.Integer, db.ForeignKey('address.id'))
)
class Person(db.Model):
__tablename__ = "person"
id = db.Column(Integer, primary_key=True)
name = db.Column(String, nullable=False)
addresses = db.relationship('Address', secondary=personaddress, backref=db.backref('person', lazy='dynamic'))
class Address(db.Model):
__tablename__ = "address"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String, nullable=False)
Run Code Online (Sandbox Code Playgroud)
要求
现在我想创建一个包含表单的单个页面来实现以下功能:
重要要求:使用QuerySelectField,我可以为一个人选择现有地址.但我想以相同的形式添加新地址.
我已经model_form
使用了FormField
用于连接表的主要模型和子表单,但我无法弄清楚如何更新包括外键关系在内的所有内容.该页面应该有一个提交按钮,用于显示所有表单和子表单.
问题
基本上我正在尝试运行一些代码(Python 2.7),如果网站上的内容发生变化,否则稍等一会儿再检查一下.
我正在考虑比较哈希值,问题是如果页面改变了单个字节或字符,则哈希值会有所不同.因此,例如,如果页面在页面上显示当前日期,则每次散列都不同并告诉我内容已更新.
那么......你会怎么做?你会看看HTML 的Kb大小吗?您是否会查看字符串长度并检查例如长度是否已更改超过5%,内容是否已"更改"?或者是否存在某种哈希算法,如果只更改了字符串/内容的一小部分,则哈希保持不变?
关于最后修改 - 遗憾的是并非所有服务器都正确地返回此日期.我认为这不是可靠的解决方案.我认为更好的方法 - 结合散列和内容长度解决方案.检查哈希值,如果更改了 - 检查字符串长度.
这段代码:
import datetime
d_tomorrow = datetime.date.today() + datetime.timedelta(days=1)
class Model(models.Model):
...
timeout = models.DateTimeField(null=True, blank=True, default=d_tomorrow)
...
Run Code Online (Sandbox Code Playgroud)
导致此错误:
'datetime.date' object has no attribute 'date'
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我有一个模特:
class Category(models.Model):
questions = models.ManyToManyField('Question', related_name="cat_question", blank=True)
cat_name = models.CharField(max_length=50)
cat_description = models.CharField(max_length=255)
def __unicode__(self):
return self.cat_name
Run Code Online (Sandbox Code Playgroud)
在我看来,我有:
top_categories = Category.objects.all()[:7].
Run Code Online (Sandbox Code Playgroud)
我将它作为模板中的上下文传递.我想根据问题的数量对顶级类别进行排序,如果一个类别有大多数问题,那么它应该在顶部,如果B有大多数问题那么B.然后第二大等等......
喜欢 top_categories = Category.objects.all().order_by(Count(question)
有帮助吗?
我有一个包含持续时间字段的Django模型:
class Entry(models.Model):
duration = models.DurationField()
Run Code Online (Sandbox Code Playgroud)
我想使用ModelForm为这个模型渲染一个表单:
class EditEntryForm(forms.ModelForm):
class Meta:
model = Entry
fields = ['duration']
Run Code Online (Sandbox Code Playgroud)
这一切都有效.但是,如果编辑现有模型,则在文本框中呈现的持续时间具有格式HH:MM:SS
我将永远不会处理一个多小时的持续时间.如何更改Django在表单中格式化此字段的方式MM:SS
?
我在渲染模型时已经使用了自定义模板过滤器,我无法弄清楚如何更改表单的呈现方式.
谢谢
我将 4 个相同长度的列表和列表的长度传递给我的模板。如何遍历列表?
视图.py
def allbooks(request):
ID = [1,2]
bookName = ["Python", "Java"]
author = ["idk", "who"]
copies = [3,7]
return render(request, 'allbooks.html',{'ID':ID,'bookName':bookName, 'author':author, 'copies':copies,'range':range(len(ID))})
Run Code Online (Sandbox Code Playgroud)
全书.html
{% extends 'base.html' %}
{% block content %}
{% if user.is_authenticated %}
<div>
<h3>
List of books:
</h3>
<table class="table">
<thead>
<tr>
<th>ID</th>
<th>Book Name</th>
<th>Author</th>
<th>Number of copies</th>
</tr>
</thead>
<tbody>
{% for x in range %}
<tr>
<td>{{id[x]}}</td>
<td>{{bookName[x]}}</td>
<td>{{author[x]}}</td>
<td>{{copies[x]}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% else %}
<h3>You …
Run Code Online (Sandbox Code Playgroud) 我想在模板中显示以下两个视图index.html
.
class IndexView(generic.ListView):
template_name = 'items/index.html'
context_object_name = 'popular_items_list'
def get_queryset(self):
return Item.objects.order_by('-rating')[:5]
class tryView(generic.ListView):
template_name = 'items/index.html'
context_object_name = 'latest_items_list'
def get_queryset(self):
return Item.objects.order_by('pub_date')[:5]
Run Code Online (Sandbox Code Playgroud)
有没有办法将这两个视图合并为一个视图?
我该如何显示两个查询集index.html
?
是否可以Item.objects.all()
在模板中发送所有和过滤器?
使用Python 2.7.x + Django 1.9:
我创建了一个新的超级简单的Django骨架项目 django-admin startproject simple
作为一个健全性检查,我创建了一个views.py
带有简单视图的文件,该文件输出"hello world"类型测试消息和到该视图的url路径.我可以运行它,python manage.py runserver
它工作正常.
我models.py
用一个超级简单的Django ORM模型类创建一个文件.仅供参考,我的目标是使用现有的表和模式,因此我不希望ORM生成新表.
class SuperSimpleModel(models.Model):
some_value = models.CharField(blank=True, null=True)
class Meta:
managed = False
db_table = 'model_test_table'
Run Code Online (Sandbox Code Playgroud)
仅添加import models
到我的views.py
代码会导致在服务器启动时发生以下错误python manage.py runserver
:
"RuntimeError:Model类simple.models.SuperSimpleModel没有声明一个显式的app_label,也没有在INSTALLED_APPS的应用程序中,或者在加载应用程序之前导入了它."
我认为我的应用程序没有正确初始化?我把这个问题归结为上述简单的可重复步骤.我settings.py
在上面的步骤中没有改变任何内容.通常,我需要配置数据库,但我可以重现错误,甚至没有这样做.
嗨,我正在制作一个网络服务器,我必须在其中点击来自 html 页面的一些请求并返回响应。使用 html 生成的 URL 是
但在服务器端我看不到请求数据。我正在使用
q = QueryDict(request.body)
但它显示<QueryDict: {}>
如何找到请求中的所有参数。
django ×8
python ×5
django-views ×3
compare ×1
datetime ×1
django-forms ×1
flask ×1
hash ×1
python-2.7 ×1
sqlalchemy ×1
web-crawler ×1