快速提问,
我试图清理我的 models.py,它有点乱;我认为按字母顺序排列它们会很聪明......
问题某些模型引用其他模型(通过外键),这些模型现在在文件中的下面定义。
我确信这很容易解决,我该怎么办?
from django.db import models
class Craft(models.Model):
subdpt = models.ForeignKey(Subdepartment, on_delete=models.CASCADE)
#### UNDEFINED NAME SUBDEPARTMENT ###
title = models.CharField(max_length = 200)
description = models.CharField(max_length = 200, blank = True)
def __str__(self):
return self.title
class Subdepartment(models.Model):
subdpt_name = models.CharField(max_length=200)
def __str__(self):
return self.subdpt_name
class Meta:
permissions = (
("can_add", "Can add items in app"),
("can_edit", "Can edit items in app"),
)
Run Code Online (Sandbox Code Playgroud) 我有一种情况,当DB中的某些内容发生变化时,我需要通知某些用户.我的想法是抓住pre_save并post_save发出信号并制作某种差异和邮件.一般来说它运作良好,但我不知道如何获得m2m字段的差异.
目前我有这样的事情:
def pre_save(sender, **kwargs):
pk = kwargs['instance'].pk
instance = copy.deepcopy(sender.objects.get(pk=pk))
tracking[sender] = instance
def post_save(sender, **kwargs):
instance = copy.deepcopy(kwargs['instance'])
print diff(instance, (tracking[sender])) # TODO: don't print, save diff somewhere
Run Code Online (Sandbox Code Playgroud)
Diff函数应该适用于每个模型(在mommet我有四个模型类).使用深度复制,我可以保存旧模型,但我不知道如何保存m2m字段,因为它们在单独的表中(是的,我知道我可以获得这些数据,但在执行的时候我不知道哪些字段是m2m,我不想为每个型号创建不同的插槽).我想要的是通用解决方案,所以我可以稍后添加模型而不考虑通知部分.
我的计划是在调用插槽后调用get_data()并clear_data()运行save(),以清理插槽生成的差异.
这是这样做的好方法吗?有没有更好的办法?是否有能为我做这项工作的django应用程序?
请原谅我的英语,这不是我的母语.
给定两个组件:
project.web
project.lib
project.web程序集引用了包含一些业务逻辑的project.lib.来自project.lib的一个简单类:
public class Person
{
public string Name;
}
Run Code Online (Sandbox Code Playgroud)
在project.web.Controllers中:
Using project.lib.models;
public class PersonController : Controller
{
Person person = new Person();
public ActionResult Index()
{
return View(person);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我有一些问题的部分.在很多示例项目中,我在View中看到了以下内容(在本例中为Index.aspx):
<% @Import Namespace="project.lib.models" %>
Run Code Online (Sandbox Code Playgroud)
允许您像这样使用Model对象:
<%= Model.Name %>
Run Code Online (Sandbox Code Playgroud)
我没有像工作那样工作,我必须这样做:
<%= (Model as Person).Name %>
Run Code Online (Sandbox Code Playgroud)
要么
<%
var person = (Person)Model;
Response.Write(person.Name);
%>
Run Code Online (Sandbox Code Playgroud)
这是为什么呢?这种情况的原因是什么?评论?建议?我的类定义如下所示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace project.lib.models
{
public class Person
{
public Int64 PersonID;
public string DisplayName;
public …Run Code Online (Sandbox Code Playgroud) 在我的数据库中,OptionSets与其他OptionSet相关联.如果我加入两个单独的表,我会创建一个简单的连接表.但是,Rails喜欢将其外键命名为<singular_table_name> _id,即optionset_id.但是,如果我自己加入表,我显然不能给这两个表赋予相同的名称.我该如何处理?
create_table :optionsets_optionsets do |t|
t.column :optionset_id, :integer
t.column :dependent_optionset_id, :integer # how do i deal with this?
endRun Code Online (Sandbox Code Playgroud) View接受一个Model.但我需要为两个模型绘制HTML输入控件.一个例子将说明:
我有一个屏幕,我添加员工.在添加了他们的名字,姓氏等之后,我需要用户选择员工所在的公司数量.
公司在一张桌子上.员工在另一个员工.链接表加入了它们.
所以我似乎需要将公司传递给View.我可以将多个模型传递给视图吗?或者我是否必须在View中进行丑陋的数据库查找才能找到公司,并在没有HTML帮助程序的情况下为复选框手动吐出HTML?
我有这个模型
class SiteUser(db.Model):
site_user = db.UserProperty()
total_votes = db.IntegerProperty(default=1)
liked_items = db.StringProperty()
class Item(db.Model):
user_who_liked_this_item = db.UserProperty()
title = db.StringProperty()
url = db.StringProperty()
date = db.DateTimeProperty(auto_now_add=True)
points = db.IntegerProperty(default=1)
Run Code Online (Sandbox Code Playgroud)
Item表已创建但未创建SiteUser表.谁能帮助我理解我做错了什么?
谢谢?
我有一些关于保存登录用户的事情,save_model()和save_formset()来自Django的modelAdmin,我想问一下.
考虑一下,我有一个模型,用于拍摄用户通过http POST上传的照片.
在models.py中:
class photo(models.Model):
title = models.CharField(max_length=50)
img = models.ImageField(upload_to='photocollection')
uploader = models.ForeignKey(User)
latitude = models.FloatField(null=True, blank=True)
longitude = models.FloatField(null=True, blank=True)
def save(self):
#Retain the model instance to do some processing before saving:
self.latitude = exif.getGPSLatitude(self.img)
self.longitude = exif.GPSLongitude(self.img)
return super(photoCollection, self).save()
class photoForm(ModelForm):
class Meta:
model = photo
Run Code Online (Sandbox Code Playgroud)
然后在我的views.py中:
def upload(request):
form = photoForm(request.POST, request.FILES)
if form_is_valid():
#do something useful
form.save()
Run Code Online (Sandbox Code Playgroud)
在这里,我有一个有趣的场景.我的views.py中的表单无效,因为模型中的['uploader']字段永远不会更新,并且它是必填字段,因此不会保存.
1)如何获得表格验证?
另外,在保存表单时,我在这里看到了一篇文章,讲述了如何使用modelAdmin中的save_model()来保存ForeignKey(用户).通过在admin.py中创建一个photoAdmin类,我已尝试覆盖链接中显示的内容:
class photoAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
if not change: …Run Code Online (Sandbox Code Playgroud) 如何在INSTALLED_APPS中的settings.py中导入所有模型?当我试图插入一些模型时,发生了一个错误:"没有名为app1_model的模型"
-ProjectName
--ProjectName
---models
----__init__.py
----admin.py
----app_1_model
----....
----app_n_model
---templates
---__init__.py
---settings.py
---urls.py
---wsgi.py
--manage.py
Run Code Online (Sandbox Code Playgroud)
^项目的结构^
我有一个模型配置,顶部有以下内容:
<?php
namespace App;
use DB;
use Illuminate\Database\Eloquent\Model;
class Config extends Model
{
protected $table = 'config';
public function getConfigVariables()
{
$config = DB::table('config')->where('is', '1')->first();
session()->put('name',$config['name']);
session()->put('infoemail',$config['infoemail']);
session()->put('copyrightowner',$config['copyrightowner']);
Run Code Online (Sandbox Code Playgroud)
我希望在控制器中调用它来设置会话,以便在我设置的顶级路由中设置
Route::get('/',
[
'uses' => 'ConfigController@ConfigVariables',
'as' => 'home'
]);
Run Code Online (Sandbox Code Playgroud)
不起作用的配置控制器方法是:
public function ConfigVariables()
{
Config::getConfigVariables();
session()->put('thisyear',ReturnCurrentYear());
$footer = "© ".session()->get('thisyear').", ".session()->get('name');
session()->put('footer',$footer);
return view('welcome');
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用,我被困住了!
我是RoR的新手,我正在练习模特和协会.
我用belongs_to关联创建了两个模型.当我尝试通过Rails控制台创建其中一个模型的对象时,我得到一个回滚事务,我不知道为什么.所有帮助将不胜感激!
我已成功创建用户:
=> #<User id: 1, name: "Jen", created_at: "2016-12-04 17:48:33", updated_at: "2016-12-04 17:48:33">
Run Code Online (Sandbox Code Playgroud)
当我尝试创建一个Post对象时,我得到了这个:
2.3.0 :012 > post = Post.create(body: "hola soy un post nuevo")
(0.2ms) begin transaction
(0.1ms) rollback transaction
=> #<Post id: nil, user_id: nil, body: "hola soy un post nuevo", created_at: nil, updated_at: nil>
Run Code Online (Sandbox Code Playgroud)
models/user.rb>
class User < ApplicationRecord
has_many :posts
end
Run Code Online (Sandbox Code Playgroud)
models/post.rb>
class Post < ApplicationRecord
belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)
db/schema.rb>
ActiveRecord::Schema.define(version: 20161204174201) do
create_table "posts", force: :cascade do |t|
t.integer "user_id"
t.text "body"
t.datetime …Run Code Online (Sandbox Code Playgroud) model-view-controller activerecord ruby-on-rails associations models
models ×10
django ×4
python ×4
asp.net-mvc ×2
activerecord ×1
associations ×1
c# ×1
controllers ×1
diff ×1
forms ×1
laravel-5 ×1
view ×1
views ×1