2011-01-28 52 views
1

如何写联接在Django,我已经通过下面的Django文档,但是接缝是不工作的我的模型如何在django中写入连接?

http://docs.djangoproject.com/en/1.2/topics/db/queries/#lookups-that-span-relationships

和模型/ MANY_TO_MANY/

和一些博客

我的型号:

class Profile(models.Model): 
    name = models.CharField(max_length=50, primary_key=True) 
    assign = models.CharField(max_length=50) 
    doj = models.DateField() 
    dob = models.DateField() 

    class Meta: 
     db_table = u'profile' 

    def __str__(self): 
     return '%s %s %s %s' % (self.name,self.assign,self.doj,self.dob) 

    def __unicode__(self): 
     return u'%s %s %s %s' % (self.name,self.assign,self.doj,self.dob) 


    enter code here 

class working(models.Model): 
    w_name =models.ForeignKey(Profile, db_column='w_name') 
    monday = models.IntegerField(null=True, db_column='monday', blank=True) 
    tuesday = models.IntegerField(null=True, db_column='tuesday', blank=True) 
    wednesday = models.IntegerField(null=True, db_column='wednesday', blank=True) 

    class Meta: 
     db_table = u'working' 

    def __str__(self): 
     return '%s %s %s %s' % (self.w_name,self.monday,self.tuesday,self.wednesday) 

    def __unicode__(self): 
     return u'%s %s %s %s' % (self.w_name,self.monday,self.tuesday,self.wednesday) 

我想在两个表格之间进行连接和workingday

like m=working.objects.filter(name='sushanth').select_related() 

如果我上面的查询运行我会得到

Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/usr/lib/pymodules/python2.6/django/db/models/manager.py", line 129, in filter 
    return self.get_query_set().filter(*args, **kwargs) 
    File "/usr/lib/pymodules/python2.6/django/db/models/query.py", line 498, in filter 
    return self._filter_or_exclude(False, *args, **kwargs) 
    File "/usr/lib/pymodules/python2.6/django/db/models/query.py", line 516, in _filter_or_exclude 
    clone.query.add_q(Q(*args, **kwargs)) 
    File "/usr/lib/pymodules/python2.6/django/db/models/sql/query.py", line 1675, in add_q 
    can_reuse=used_aliases) 
    File "/usr/lib/pymodules/python2.6/django/db/models/sql/query.py", line 1569, in add_filter 
    negate=negate, process_extras=process_extras) 
    File "/usr/lib/pymodules/python2.6/django/db/models/sql/query.py", line 1737, in setup_joins 
    "Choices are: %s" % (name, ", ".join(names))) 
FieldError: Cannot resolve keyword 'name' into field. Choices are: monday, tuesday, wednesday, w_name 

我需要查询,我可以参加工作和个人资料。

支持

select working.*,profile.assign,profile.doj from working join profile where name=w_name ;

我知道Django的不支持连接,内部连接也没有问题啊。

任何人都可以帮助这.........................?

+1

@ user593132:使代码是可读的,请格式化你的问题(的`{}`按钮),否则是很难看的。 – 2011-01-28 01:34:42

+0

让我建议你为'工作'模型提供一个更好的名字:`WorkSchedule`。始终使用CamelCase作为模型名称。你的w_name列应该被命名为`profile`,它指向配置文件,而不是名字。如果没有大的理由,不要更改db_columnt和db_table名称。 – Ski 2011-01-28 03:06:16

回答

3

请格式化您的问题,以便代码可读({}图标),否则很难阅读。

working.objects.filter(name=将失败,因为您的working模型没有name字段。

从您链接到文档:

Django还提供了一个功能强大,直观 办法“遵循”在 查找关系,自动照顾的SQL JOIN的 你的 幕后。要跨越关系,只需要 使用跨模型的相关字段 的字段名称,由双重分隔 下划线,直到您到达 字段。

这相当于:

m = working.objects.filter(w_name__name='sushanth').select_related()