FK未以Django形式填充

2024-04-27 04:25:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个小问题要问社区。我想知道为什么当我进入编辑表单时外键不会出现。当我编辑信息时,除了status(它是一个从status表指向project表的foreignkey)之外,我的所有数据都会被填充,没有任何选择。我用同样的方法表单.py用于添加和编辑信息。在

在模型.py在

from django.db import models
from clients.models import Clients
from django.contrib.auth.models import User
from settings import STATUS_CHOICES

class Project(models.Model):
 client = models.ForeignKey(Clients, related_name='projects')
 created_by = models.ForeignKey(User, related_name='created_by')


 #general information
 proj_name = models.CharField(max_length=255, verbose_name='Project Name')
 pre_quote = models.CharField(max_length=3,default='10-')
 quote = models.IntegerField(max_length=10, verbose_name='Quote #', unique=True)
 desc = models.TextField(verbose_name='Description')
 starts_on = models.DateField(verbose_name='Start Date')
 completed_on = models.DateField(verbose_name='Finished On')

 def __unicode__(self):
    return u'%s' % (self.proj_name) 

 def current_status(self):
        try:
                return self.status.all().order_by('-id')[:1][0]
        except:
            return None



class Status(models.Model):
 project = models.ForeignKey(Project, related_name='status')
 value = models.CharField(max_length=20, choices=STATUS_CHOICES, verbose_name='Status')
 date_created= models.DateTimeField(auto_now=True) 

 def __unicode__(self):
    return self.value

 class Meta:
    verbose_name = ('Status')
    verbose_name_plural = ("Status")

在视图.py在

^{pr2}$

在表单.py在

from django.db import models
from project.models import Project, Status
from django.forms import *
from django import forms
from settings import STATUS_CHOICES

class AddSingleProjectForm(ModelForm):
  status = forms.ChoiceField(choices=STATUS_CHOICES)
  class Meta:
        model = Project
        exclude = ('pre_quote', 'created_by')

来自editproject模板的代码段:

{% block content %}
<FORM METHOD="POST" ACTION="">
{% csrf_token %}
<table>
  {{ form.as_table }}
</table>
<input type="submit" value="Save Project">
</FORM>
{% endblock %}

如有任何建议,将不胜感激。在

谢谢。在


Tags: djangonamefrompyimportselfprojectverbose
1条回答
网友
1楼 · 发布于 2024-04-27 04:25:51

我认为这是因为项目被定义为地位的外键,而不是相反。外键是一对多的关系。每个项目可以有多个状态连接到它。在

这就是为什么在项目实例中您会发现:project.status_set而不是{}。在

您需要手动将状态添加到表单中,方法是查找连接到项目的最新状态。或者根据你的需求,把外键改成一对一的关系。在

相关问题 更多 >