В моем models.py у меня есть 3 класса
Project Finding FindingType
Отношения между сущностями:
Project может иметь от 0 до N Finding. Каждый результат имеет один тип поиска.
class Project(models.Model):
completed_date = models.DateField(blank=True, null=True)
.. and some other attributes
class RA_Finding_type(models.Model):
finding_title = models.CharField(max_length=40)
finding_desc = models.TextField()
remediation_desc = models.TextField()
trc_control_number = models.TextField()
display = models.BooleanField(blank=True)
class RA_Finding(models.Model):
project = models.ForeignKey(Project)
if (not project.completed_date): # Error here.
finding_type = models.ForeignKey(RA_Finding_type, limit_choices_to={'display': True},verbose_name='Weakness Type')
else:
finding_type = models.ForeignKey(RA_Finding_type, limit_choices_to={'display': False},verbose_name='Weakness Type')
... другие атрибуты
В admin.py
class ProjectAdmin(admin.ModelAdmin):
form = ProjectAdminForm # For user sort...
readonly_fields = ('id', ... others)
inlines = [
FindingInline,.. other inlines
]
class FindingInline(admin.StackedInline):
model = RA_Finding
def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
field = super(FindingInline, self).formfield_for_foreignkey(db_field, request, **kwargs)
if db_field.name == 'project':
if request._obj_ is not None:
field.queryset = field.queryset.filter(id__exact = request._obj_.pk)
else:
field.queryset = field.queryset.none()
return field
extra = 1
fieldsets = (
(None, {
'fields': ('finding_type',
... other fields
)
})),
Я хочу заполнить атрибут find_type на основе даты завершения , Это первично для устаревших данных. Требование - для проектов с завершенной датой отображаются все типы поиска, в противном случае отображается только тип поиска, для которого установлено значение true. Когда я пытаюсь это сделать, я получаю сообщение об ошибке - объект ForeignKey не имеет атрибута. Есть ли способ достичь этого в Django? Ценю всю помощь.